Rails accepts_nested_attributes_for 关联模型未创建
Rails accepts_nested_attributes_for associated models not created
我有两个模型(Company
和 User
)有 belongs_to/has_many
关系。
class Company < ActiveRecord::Base
attr_accessor :users_attributes
has_many :users
accepts_nested_attributes_for :users, allow_destroy: true
end
class User < ActiveRecord::Base
belongs_to :company
end
在我的 CompaniesController
中,我想创建一个 Company
的新实例以及一组 Users
。
class Cms::CompaniesController < ApplicationController
def create
company = Company.new(company_params)
respond_to do |format|
if company.save
format.json { render json: company, status: :ok }
else
format.json { render json: company.errors.messages, status: :bad_request }
end
end
end
private
def company_params
params.require(:company).permit(
:id,
:name,
users_attributes: [
:id,
:_destroy,
:first_name,
:last_name,
:email
]
)
end
end
当我调用 company.save
时,我希望保存 Company
的新实例以及 User
的几个新实例,具体取决于我的用户数量参数,但是没有用户被保留。
这是 company_params
的示例:
{"id"=>nil, "name"=>"ABC", "users_attributes"=>[{"first_name"=>"Foo", "last_name"=>"Bar", "email"=>"foo@bar.com"}]}
我在这里错过了什么?
class Company < ActiveRecord::Base
has_many :users
accepts_nested_attributes_for :users, allow_destroy: true
end
其他一切都应该有效。
--
attr_accessor
在您的 class.
中创建 getter
/setter
方法
主要用于virtual attributes(未保存到数据库的)。您当前的设置阻止您保存 users_attributes
参数,因此您的 users
没有保存。
我有两个模型(Company
和 User
)有 belongs_to/has_many
关系。
class Company < ActiveRecord::Base
attr_accessor :users_attributes
has_many :users
accepts_nested_attributes_for :users, allow_destroy: true
end
class User < ActiveRecord::Base
belongs_to :company
end
在我的 CompaniesController
中,我想创建一个 Company
的新实例以及一组 Users
。
class Cms::CompaniesController < ApplicationController
def create
company = Company.new(company_params)
respond_to do |format|
if company.save
format.json { render json: company, status: :ok }
else
format.json { render json: company.errors.messages, status: :bad_request }
end
end
end
private
def company_params
params.require(:company).permit(
:id,
:name,
users_attributes: [
:id,
:_destroy,
:first_name,
:last_name,
:email
]
)
end
end
当我调用 company.save
时,我希望保存 Company
的新实例以及 User
的几个新实例,具体取决于我的用户数量参数,但是没有用户被保留。
这是 company_params
的示例:
{"id"=>nil, "name"=>"ABC", "users_attributes"=>[{"first_name"=>"Foo", "last_name"=>"Bar", "email"=>"foo@bar.com"}]}
我在这里错过了什么?
class Company < ActiveRecord::Base
has_many :users
accepts_nested_attributes_for :users, allow_destroy: true
end
其他一切都应该有效。
--
attr_accessor
在您的 class.
getter
/setter
方法
主要用于virtual attributes(未保存到数据库的)。您当前的设置阻止您保存 users_attributes
参数,因此您的 users
没有保存。