我正在尝试在狂欢产品上添加一个字段,这只是一个复选框,只是标记产品,如果它们是待售或是内部产品。
我添加了迁移,最后想出了如何在表单上添加复选框,但是当我点击“更新”时,我会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 %>
答案 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
将其标记为特定型号的默认值,将删除质量分配警告消息!