2013-07-27 16 views
7

Szukałem dość długo, ale nie mogłem znaleźć rozwiązania. Oto moje modele:Nie można przypisać atrybutów chronionych masą do błędu podczas korzystania z zagnieżdżonego formularza

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 

Wszystko Wygląda w porządku, dopóki nie używać simple_form_for zamiast normalnego form_for w opracować/rejestracji/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 %> 

zagnieżdżenia część stawia częściowy z odpowiednimi model_fields nazwą, która zawiera odpowiednie pola.

* _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=>"" %> 

Problem jest z f.simple_fields_for, jeśli usunąć proste_ wszystko działa poprawnie. Ale nie chcę, aby został usunięty. Błąd spotykam się:

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

Can't mass-assign protected attributes: org 

parametrów żądania są:

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

proszę o pomoc.

+0

Jakiej wersji szyn używasz? – Philip7899

+0

@ Philip7899 Nie wiem o OP, ale używam szyn 3.2.13 – GeekToL

Odpowiedz

1

W Web dodać:

attr_accessible :role_attributes 
accepts_nested_attributes_for :role 

Edycja: Początkowo miał go jako User ale Opracować zasób jest Web.

Edycja2: Nieodebrany as: :role. Zmieniono wartości attr, aby odzwierciedlić.

+0

To nie pomogło. Wciąż mam ten sam problem. – sushilthe

+0

Moja oryginalna odpowiedź miała je pod User, a nie Web. Czy próbowałeś tego pod Web? –

+0

Teraz mam to: Nie znaleziono powiązania dla nazwy "org". Czy zostało już zdefiniowane? – sushilthe

Powiązane problemy