У меня есть две модели (и User
), которые имеют отношение belongs_to/has_many
.Rails accepts_nested_attributes_for связанных моделей не создано
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
быть сохранен, в зависимости от того, сколько пользователей у меня есть в моем Params, однако ни один пользователь не сохраняется.
Вот пример того, что company_params
выглядит следующим образом:
{"id"=>nil, "name"=>"ABC", "users_attributes"=>[{"first_name"=>"Foo", "last_name"=>"Bar", "email"=>"[email protected]"}]}
Что я здесь отсутствует?
На первый взгляд вы выглядите здорово, но мне любопытно узнать, что произойдет, если вы удалите 'attr_accessor: users_attributes' из модели' Company' – kjmagic13
Я получаю 'Неперечисленные параметры: токен, id, users_attributes' при вызове 'company = Company.new (company_params)' и значение 'company_params' теперь просто' {"name" => "ABC"} '. Интересно, однако, если я вставляю 'binding.pry' прямо перед этой строкой и копирую/вставляю код для определения' company_params', вызов 'Company.new (company_params)' создает компанию AND пользователей. Это не имеет никакого смысла ... – ACIDSTEALTH
У вас есть модель для моделей пользователей? –