首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在单个事务(Rails 5)中创建父记录之后创建子记录?

如何在单个事务(Rails 5)中创建父记录之后创建子记录?
EN

Stack Overflow用户
提问于 2016-11-25 01:40:51
回答 1查看 379关注 0票数 0

我需要在单个事务中创建一个用户和一个雇员,但我找不到合适的方法。

这是模特。

代码语言:javascript
复制
class User < ApplicationRecord
  has_one :employee
end

class Employee < ApplicationRecord
  belongs_to :user
end

在控制器中,我接收来自请求的params来创建这两个模型。

代码语言:javascript
复制
{
    "username": "my_user",
    "password": "12345",
    "employee": {
        "name: "my_name",
        "lastname": "my_lastname"
    }
}

所以我想做这样的事。

代码语言:javascript
复制
class UsersController < ResourcesController
    def create
        user = User.create! do |u|
           u.username = params.username
           u.password = params.password
        end
        employee = Employee.create! do |e|
           e.name = params.name
           e.lastname = params.lastname
           e.user_id = user.id
        end
    end
end

这里的问题是,如果在创建用户之后抛出异常,那么数据库将是不一致的。我怎样才能做到正确和安全呢?

嗯,我的头撞在这面砖墙上已经有一段时间了。任何帮助,以揭示这一点,将是非常感谢!

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-25 04:38:09

试试这个:

代码语言:javascript
复制
class User < ApplicationRecord
  has_one :employee inverse_of :user
  accepts_nested_attributes_for :employee
end

class Employee < ApplicationRecord
  belongs_to :user inverse_of :employee
  validates_presence_of :user
end

class UsersController < ResourcesController
  def create
    @user = User.new(user_params)
    @user.save!
  end

  private

  def user_params
    params.require(:user).permit(:name, :password, employee_attributes: [:name,:last_name])
  end
end
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40796565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档