【发布时间】:2013-09-04 10:14:07
【问题描述】:
我已经看到http://railscasts.com/episodes/196-nested-model-form-revised 并尝试对我的炼油厂引擎进行同样的操作,但是在从管理部分添加记录时我无法看到表单中的嵌套字段,而且我也没有收到任何错误。 我无法弄清楚到底发生了什么,或者如果我遗漏了任何与炼油厂相关的配置,可能会发生什么。
我在 Rails 控制台上试过这个:
Refinery::Extension::Model.nested_attributes_options
=> {:nested_model_name=>{:allow_destroy=>false, :update_only=>false}}
我有 2 个模型问题和选项,但是在提交带有选项作为嵌套元素的问题表单时,它给了我如下错误
ActiveModel::MassAssignmentSecurity::Error in Refinery::Papers::Admin::QuestionsController#create
无法批量分配受保护的属性:refinery_papers_options
请求
参数:
{"utf8"=>"✓", "authenticity_token"=>"TqL+r60R05+meVhPBXPPipvL+X3ZNx+3dCwoThFBn/Y=", "问题"=>{"内容"=>"
aaaaaaaaaa
", "correct_answers"=>"a", "refinery_papers_options"=>{"content"=>"asdfghjklkmnv
", "_destroy"=>"0"}, "position"=>0}, "locale"=>:en}
我的模型和视图是:
问题模型:
module Refinery
module Papers
class Question < Refinery::Core::BaseModel
self.table_name = 'refinery_papers_questions'
attr_accessible :content, :correct_answers, :options_attributes, :position
validates :content, :presence => true, :uniqueness => true
has_many :options,
:foreign_key => "refinery_papers_question_id",
:class_name => "Refinery::Papers::Option",
:dependent => :destroy
accepts_nested_attributes_for :options,
:allow_destroy => true
end
end
end
Option Model:
module Refinery
module Papers
class Option < Refinery::Core::BaseModel
self.table_name = 'refinery_papers_options'
attr_accessible :content, :position, :refinery_papers_question_id
validates :content, :presence => true
belongs_to :question,
:class_name => 'Refinery::Papers::Question',
:foreign_key => :refinery_papers_question_id
end
end
end
在视图中嵌套字段的表单是这样的:
<%= f.fields_for :refinery_papers_options do |option_form| %>
<div class='field'>
<%= option_form.label :content, "Option" %><br/>
<%= option_form.text_area :content, :class => "wymeditor widest" %><br/>
</div>
<div class='field'>
<%= option_form.label :_destroy, "Remove Option" -%>
<%= option_form.check_box :_destroy -%>
</div>
<% end %>
当我在 Rails 控制台上尝试这个时,我得到了这个堆栈
2.0.0p247 :007 > Refinery::Papers::Question.create({"content"=>"
jhsdacnlkS
","correct_answers"=>"a", :refinery_papers_options => {"content"=>"sjdfgczdj
"}}) ActiveModel::MassAssignmentSecurity::Error: 无法批量分配 受保护的属性:refinery_papers_options 来自 /home/vivek/.rvm/gems/ruby-2.0.0-p247@refinery/gems/activemodel-3.2.14/lib/active_model/mass_assignment_security/sanitizer.rb:48:inprocess_removed_attributes' from /home/vivek/.rvm/gems/ruby-2.0.0-p247@refinery/gems/activemodel-3.2.14/lib/active_model/mass_assignment_security/sanitizer.rb:20:indebug_protected_attribute_removal' 来自 /home/vivek/.rvm/gems/ruby-2.0.0-p247@refinery/gems/activemodel-3.2.14/lib/active_model/mass_assignment_security/sanitizer.rb:12:insanitize' from /home/vivek/.rvm/gems/ruby-2.0.0-p247@refinery/gems/activemodel-3.2.14/lib/active_model/mass_assignment_security.rb:230:insanitize_for_mass_assignment' 来自 /home/vivek/.rvm/gems/ruby-2.0.0-p247@refinery/gems/activerecord-3.2.14/lib/active_record/attribute_assignment.rb:75:inassign_attributes' from /home/vivek/.rvm/gems/ruby-2.0.0-p247@refinery/gems/activerecord-3.2.14/lib/active_record/base.rb:498:ininitialize' 来自 /home/vivek/.rvm/gems/ruby-2.0.0-p247@refinery/gems/activerecord-3.2.14/lib/active_record/persistence.rb:44:innew' from /home/vivek/.rvm/gems/ruby-2.0.0-p247@refinery/gems/activerecord-3.2.14/lib/active_record/persistence.rb:44:increate' 来自 (irb):7 来自 /home/vivek/.rvm/gems/ruby-2.0.0-p247@refinery/gems/railties-3.2.14/lib/rails/commands/console.rb:47:instart' from /home/vivek/.rvm/gems/ruby-2.0.0-p247@refinery/gems/railties-3.2.14/lib/rails/commands/console.rb:8:instart' 来自 /home/vivek/.rvm/gems/ruby-2.0.0-p247@refinery/gems/railties-3.2.14/lib/rails/commands.rb:41:in<top (required)>' from script/rails:6:inrequire' 来自 脚本/rails:6:in `'
【问题讨论】:
-
你遇到了什么错误?
-
我遇到了任何错误。它工作得和以前一样好,但看不到嵌套属性。
-
@RajarshiDas 嘿,现在我可以看到视图中的字段,但是在提交表单后,它给我的选项批量分配错误可以帮助解决这个问题。
-
抱歉回复晚了.....如果您使用 rails 4 使用 strong_parameter 或者如果 rails 3.2 在您的模型中使用
attr_accessible :name #all fields由另一个解决方案config.active_record.whitelist_attributes = true分配,请参阅链接whitelist -
@RajarshiDas 感谢您的回复,我已经完成了您的建议,您可以检查我在上面发布的模型代码和视图代码,但我得到的不是批量分配问题。
标签: ruby ruby-on-rails-3.2 nested-attributes refinerycms model-associations