为什么在狂欢时向产品添加字段后会出现“无法批量分配受保护的属性”?

时间:2012-05-30 06:16:08

标签: spree

我正在尝试在狂欢产品上添加一个字段,这只是一个复选框,只是标记产品,如果它们是待售或是内部产品。

我添加了迁移,最后想出了如何在表单上添加复选框,但是当我点击“更新”时,我会Can't mass-assign protected attributes: for_sale

这是迁移

class AddProductForSaleField < ActiveRecord::Migration
  def up
    add_column :spree_products, :for_sale, :boolean
  end
  def down
    remove_column :spree_products, :for_sale
  end
end

这是要添加的字段

Deface::Override.new(:virtual_path  => "spree/admin/products/_form",
                     :name          => "for_sale",
                     :insert_before => "code[erb-silent]:contains('track_inventory_levels')",
                     :partial       => "spree/admin/products/for_sale")

这是部分

<%= f.field_container :for_sale do %>
    <%= f.label :for_sale, t(:for_sale) %>
    <%= f.check_box :for_sale, { :checked => true } %>
<% end %>

3 个答案:

答案 0 :(得分:3)

得到它,错过了模型部分

Spree::Product.class_eval do 
    attr_accessible :for_sale
end

答案 1 :(得分:1)

Mass Assignment是Rails为使用参数哈希构造对象的行为赋予的名称。它是“质量分配”,因为您通过单个赋值运算符为属性分配多个值。

以下代码段执行Post模型的名称和主题属性的批量分配:

Post.new(:name =&gt;“John”,:topic =&gt;“Something”)

Post.create(:name =&gt;“John”,:topic =&gt;“Something”)

Post.update_attributes(:name =&gt;“John”,:topic =&gt;“Something”)

为了使其正常工作,您的模型必须允许为您传入的哈希中的每个属性进行质量分配。

有两种情况会失败:

您有一个attr_accessible声明,其中不包含:name

您有一个attr_protected,其中包含:name

最近,默认情况下,属性必须通过attr_accessible手动列入白名单才能成功进行质量分配。在此之前,默认情况下属性是可分配的,除非它们明确地列在黑名单attr_protected或任何其他属性在白名单中使用attr_acessible。

答案 2 :(得分:0)

如果是权限问题,则可以添加:

Spree::Product.class_eval do 

  attr_accessible :variable_1, :variable_2 :as => [:default, :product]

end

将其标记为特定型号的默认值,将删除质量分配警告消息!