Ruby 如何在refinerycms中使用嵌套模型属性?
我已经看到并尝试过对我的精炼引擎进行同样的操作,但在添加管理部分的记录时,我无法看到表单中的嵌套字段,而且我也没有收到任何错误。 如果我遗漏了任何与炼油厂相关的配置,我无法弄清楚到底发生了什么或可能发生什么 我在Rails控制台上尝试了以下操作:Ruby 如何在refinerycms中使用嵌套模型属性?,ruby,ruby-on-rails-3.2,nested-attributes,refinerycms,model-associations,Ruby,Ruby On Rails 3.2,Nested Attributes,Refinerycms,Model Associations,我已经看到并尝试过对我的精炼引擎进行同样的操作,但在添加管理部分的记录时,我无法看到表单中的嵌套字段,而且我也没有收到任何错误。 如果我遗漏了任何与炼油厂相关的配置,我无法弄清楚到底发生了什么或可能发生什么 我在Rails控制台上尝试了以下操作: Refinery::Extension::Model.nested_attributes_options => {:nested_model_name=>{:allow_destroy=>false, :update_only=&
Refinery::Extension::Model.nested_attributes_options
=> {:nested_model_name=>{:allow_destroy=>false, :update_only=>false}}
我有两个模型问题和选项,但当提交带有嵌套元素选项的问题表单时,它给了我如下错误
ActiveModel::MassAssignmentSecurity::Error in Refinery::Papers::Admin::QuestionsController#create
无法批量分配受保护的属性:文件\u选项
请求
参数:
{“utf8”=>“✓",
“真实性令牌”=>“TqL+r60R05+meVhPBXPPipvL+X3ZNx+3dCwoThFBn/Y=”,
“问题”=>{“内容”=>“aaaaaaaaaa”,“正确答案”=>“a”,
“炼油厂论文选项”=>{“内容”=>“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
模块精炼
模块论文
类问题true,:university=>true
有很多选择,
:foreign\u key=>“炼油厂论文\u问题\u id”,
:class_name=>“Refinery::Papers::Option”,
:dependent=>:destroy
为:选项接受\u嵌套的\u属性\u,
:allow_destroy=>true
结束
结束
结束
选项模型:
模块精炼厂
模块论文
类选项true
属于:问题,
:class_name=>“炼油厂::论文::问题”,
:foreign\u key=>:炼油厂\u论文\u问题\u id
结束
结束
结束
嵌套字段的视图表单如下所示:
<%= 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 %>
“wymeditor最宽”%>
当我在rails控制台上尝试这个时,我得到了这个堆栈
2.0.0p247:007>精炼厂::论文::问题。创建({“内容”=>“jhsdacnlkS”,“正确答案”=>“a”,
:炼油厂论文(选项=>{“内容”=>“sjdfgczdj“})
ActiveModel::MassAssignmentSecurity::错误:无法批量分配
受保护的属性:从
/home/vivek/.rvm/gems/ruby-2.0.0-p247@refinery/gems/activemodel-3.2.14/lib/active\u model/mass\u assignment\u security/sanitizer.rb:48:in
process\u从中删除了\u属性
/home/vivek/.rvm/gems/ruby-2.0.0-p247@refinery/gems/activemodel-3.2.14/lib/active\u model/mass\u assignment\u security/sanitizer.rb:20:in
debug\u protected\u attribute\u removation'来自
/home/vivek/.rvm/gems/ruby-2.0.0-p247@refinery/gems/activemodel-3.2.14/lib/active\u model/mass\u assignment\u security/sanitizer.rb:12:in
sanitize'来自
/home/vivek/.rvm/gems/ruby-2.0.0-p247@refinery/gems/activemodel-3.2.14/lib/active\u model/mass\u assignment\u security.rb:230:in
对来自的“批量分配”进行消毒
/home/vivek/.rvm/gems/ruby-2.0.0-p247@refinery/gems/activerecord-3.2.14/lib/active\u record/attribute\u assignment.rb:75:in
assign_attributes'来自
/home/vivek/.rvm/gems/ruby-2.0.0-p247@refinery/gems/activerecord-3.2.14/lib/active\u record/base.rb:498:in
initialize'来自
/home/vivek/.rvm/gems/ruby-2.0.0-p247@refinery/gems/activerecord-3.2.14/lib/active\u record/persistence.rb:44:in
new'来自
/home/vivek/.rvm/gems/ruby-2.0.0-p247@refinery/gems/activerecord-3.2.14/lib/active\u record/persistence.rb:44:in
create'from(irb):7 from
/home/vivek/.rvm/gems/ruby-2.0.0-p247@refinery/gems/railties-3.2.14/lib/rails/commands/console.rb:47:in
start'从
/home/vivek/.rvm/gems/ruby-2.0.0-p247@refinery/gems/railties-3.2.14/lib/rails/commands/console.rb:8:in
start'from
/home/vivek/.rvm/gems/ruby-2.0.0-p247@refinery/gems/railties-3.2.14/lib/rails/commands.rb:41:in
来自脚本/rails:6:in的require'from
脚本/rails:6:in`'
也许这会有帮助
关于您在引擎中创建的不同模型的
类名
,可能会有混淆。上面的代码只是精炼厂核心
团队如何执行嵌套属性概念的一个示例。您遇到了什么错误?我想没有任何错误。它工作得很好,与以前一样e但ale没有看到嵌套属性。@RajarshiDas嘿,现在我可以在视图中看到字段,但在提交表单后,它的“给我大量分配选项错误”可以帮助解决这一问题。很抱歉,延迟回复…..如果您使用rails 4使用或rails 3.2使用attr\u accessible:name#您模型中所有分配的字段
另一个解决方案config.active\u record.whitelist\u attributes=true
请查看链接@RajarshiDas谢谢您的回复,我已经完成了您的建议,您可以查看我上面发布的模型代码和视图代码,但我得到的不是批量分配问题。
has_many :parts,
:foreign_key => :refinery_page_id,
:class_name => '::Refinery::PagePart',
:order => 'position ASC',
:inverse_of => :page,
:dependent => :destroy,
:include => ((:translations) if ::Refinery::PagePart.respond_to?(:translation_class))
accepts_nested_attributes_for :parts, :allow_destroy => true