2013-07-27 2 views
7

Я искал довольно длинный, но не смог найти решение. Вот мои модели:Невозможно назначить защищенные атрибуты с ошибкой при использовании вложенной формы

web.rb

class Web < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 

    attr_accessible :email, :password, :password_confirmation, :user_type, :remember_me 

    belongs_to :role, :polymorphic => true 
end 

user.rb

class User < ActiveRecord::Base 
has_one :web, :as => :role 
attr_accessible :dob, :fname, :lname 
end 

org.rb

class Org < ActiveRecord::Base 
    has_one :web, :as => :role 
    attr_accessible :name, :website 
end 

Все кажется нормально, пока я не использовать simple_form_for вместо нормального form_for в DEViSE/регистрации/new.html.erb

<%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :class => 'form-horizontal' }) do |f| %> 

    <%= f.input :email, label: false, :input_html => { :class => "span6", placeholder: "Email", type: "email", required: true}%> 

    <%= f.input :password, label: false, :input_html => { :class => "span6", placeholder: "Password", type: "password" }%> 

    <%= f.input :password_confirmation, label: false, :input_html => { :class => "span6", placeholder: "Re-enter Password", type: "password" }%> 

    <%= f.input :user_type, as: :hidden, :input_html => { :value => user_type} %> 

    <%= f.simple_fields_for resource.role do |rf| %> 
    <%= render :partial => "#{child_class_name.underscore}_fields", :locals => { :f => rf } %> 
    <% end %> 
    <%= f.submit "Sign up" %> 
<% end %> 

Гнездовая часть ставит парциальное с именем соответствующие model_fields, который содержит соответствующие поля.

* _org_fields.html.erb *

<%= f.text_field :name, :class=>"span6", :type=>"text", :placeholder=>"Name", :required=>"" %><br /> 
<%= f.text_field :website, :class=>"span6", :type=>"text", :placeholder=>"Website", :required=>"" %> 

Проблема заключается с f.simple_fields_for, если я удалить simple_ все работает отлично. Но я не хочу, чтобы его удаляли. Ошибка я столкнуться является:

ActiveModel::MassAssignmentSecurity::Error in Devise::RegistrationsController#create 

Can't mass-assign protected attributes: org 

Параметры запроса являются:

{"utf8"=>"✓", 
"authenticity_token"=>"NnsyNdrrKJmd8QutqVs6HqZi0EnQmAmZF7zGYqnu+rI=", 
"web"=>{"email"=>"", 
"password"=>"[FILTERED]", 
"password_confirmation"=>"[FILTERED]", 
"user_type"=>"org", 
"org"=>{"name"=>"", 
"website"=>""}}, 
"commit"=>"Sign up"} 

Пожалуйста, помогите.

+0

Какую версию рельсов вы используете? – Philip7899

+0

@ Philip7899 Я не знаю о OP, но я использую рельсы. 3.2.13 – GeekToL

ответ

1

В Web добавить:

attr_accessible :role_attributes 
accepts_nested_attributes_for :role 

Edit: Первоначально было как User но Придумайте ресурс Web.

Редактировать2: Пропущено as: :role. Изменены значения attr для отражения.

+0

Это не помогло. У меня все еще такая же проблема. – sushilthe

+0

Мой первоначальный ответ имел их под User, а не с Web. Вы пробовали его в Интернете? –

+0

Теперь у меня есть: Не найдено никакой ассоциации для имени 'org '. Он еще не определен? – sushilthe

Смежные вопросы