我需要在单个事务中创建一个用户和一个雇员,但我找不到合适的方法。
这是模特。
class User < ApplicationRecord
has_one :employee
end
class Employee < ApplicationRecord
belongs_to :user
end在控制器中,我接收来自请求的params来创建这两个模型。
{
"username": "my_user",
"password": "12345",
"employee": {
"name: "my_name",
"lastname": "my_lastname"
}
}所以我想做这样的事。
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这里的问题是,如果在创建用户之后抛出异常,那么数据库将是不一致的。我怎样才能做到正确和安全呢?
嗯,我的头撞在这面砖墙上已经有一段时间了。任何帮助,以揭示这一点,将是非常感谢!
提前感谢!
发布于 2016-11-25 04:38:09
试试这个:
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
endhttps://stackoverflow.com/questions/40796565
复制相似问题