2013-07-27 46 views
7

Tôi đã tìm kiếm khá lâu, nhưng không thể tìm thấy giải pháp. Dưới đây là mô hình của tôi:Không thể chỉ định khối lượng thuộc tính được bảo vệ tạo ra lỗi khi sử dụng biểu mẫu lồng nhau

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 

Tất cả mọi thứ có vẻ tốt đẹp cho đến khi tôi sử dụng simple_form_for thay vì form_for bình thường trong devise/đăng ký/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 %> 

Phần làm tổ đặt phần với tên model_fields thích hợp, trong đó có lĩnh vực tương ứng.

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

Vấn đề là với f.simple_fields_for, nếu tôi loại bỏ simple_ mọi thứ hoạt động tốt. Nhưng tôi không muốn nó bị loại bỏ. Các lỗi tôi gặp phải là:

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

Can't mass-assign protected attributes: org 

các thông số yêu cầu là:

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

Xin vui lòng giúp.

+0

Bạn đang sử dụng phiên bản đường ray nào? – Philip7899

+0

@ Philip7899 Tôi không biết về OP, nhưng tôi đang sử dụng đường ray 3.2.13 – GeekToL

Trả lời

1

Trong Web, thêm:

attr_accessible :role_attributes 
accepts_nested_attributes_for :role 

Edit: Nguyên đã có nó như User nhưng Vạch tài nguyên là Web.

Chỉnh sửa2: Đã bỏ lỡ as: :role. Thay đổi giá trị attr để phản ánh.

+0

Điều đó không giúp ích gì. Tôi vẫn có cùng một vấn đề. – sushilthe

+0

Câu trả lời ban đầu của tôi có họ dưới Người dùng chứ không phải Web. Bạn đã thử nó dưới Web? –

+0

Bây giờ tôi có điều này: Không tìm thấy liên kết nào cho tên 'org '. Nó đã được xác định chưa? – sushilthe