Создание отдельных моделей в единой форме с accepts_nested_attributes_for (b/t и has_many)

Попытка использовать вложенные атрибуты для создания Organization и User в одной форме. Я получаю следующую ошибку: Не удается массово назначить защищенные атрибуты: пользователь (ActiveModel::MassAssignmentSecurity::Error)

Вытягивая мои волосы на этом

organization.rb

class Organization < ActiveRecord::Base  
  attr_accessible :name, :users_attributes
  has_many :users, dependent: :destroy      
  accepts_nested_attributes_for :users  
end

user.rb (используя devise)

class User < ActiveRecord::Base
  attr_accessible :email     
  belongs_to :organization
end

новый.html.haml

= form_for @organization do |f|

  = f.label :name, "Company Name"
  = f.text_field :name, placeholder: "Company Name"

  = f.fields_for :user do |ff| -# tried :users here and the form doesn't render
    = ff.label :email, "Email Address"
    = ff.email_field :email, placeholder: "Email Address"

= f.submit "Create Account"

person pruett    schedule 20.01.2013    source источник


Ответы (1)


На это много ответили в Stackoverflow.

f.fields_for :users

А в контроллере нужно создать пользователя:

@organization.users.build

Вы получаете Can't mass-assign protected attributes: user, потому что атрибут пользователя недоступен, потому что он не существует.

person Robin    schedule 20.01.2013
comment
Спасибо за объяснение! я уходил с рельсовых передач, где он не использовал build нигде в контроллере. у меня сложилось впечатление, что accepts_nested_attributes позаботился о здании для вас, но я думаю, что имеет смысл строить явно в контроллере - person pruett; 21.01.2013