我有两个与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"}]}
我在这里缺少什么?
答案 0 :(得分:0)
class Company < ActiveRecord::Base
has_many :users
accepts_nested_attributes_for :users, allow_destroy: true
end
其他一切都应该有用。
-
attr_accessor
在您的班级中创建getter
/ setter
个方法。
它主要用于virtual attributes(未保存到数据库中的那些)。您当前的设置会阻止您保存users_attributes
参数,因此您的users
无法保存。