Ruby 如何在refinerycms中使用嵌套模型属性?

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=&

我已经看到并尝试过对我的精炼引擎进行同样的操作,但在添加管理部分的记录时,我无法看到表单中的嵌套字段,而且我也没有收到任何错误。 如果我遗漏了任何与炼油厂相关的配置,我无法弄清楚到底发生了什么或可能发生什么

我在Rails控制台上尝试了以下操作:

 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