0

私は、製品が売りに出されているか、内部製品であるかをマークするための単なるチェックボックスである、スプリーの製品にフィールドを追加しようとしています。

移行を追加し、最終的にフォームにチェックボックスを追加する方法を理解しましたが、[更新]をクリックすると次のようになります。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 %>
4

3 に答える 3

3

わかった、モデル部分が欠けていた

Spree::Product.class_eval do 
    attr_accessible :for_sale
end
于 2012-05-30T17:47:06.483 に答える
1

一括割り当ては、Railsがパラメーターハッシュを使用してオブジェクトを構築する動作に付ける名前です。単一の代入演算子を介して属性に複数の値を割り当てるという点で、これは「一括代入」です。

次のスニペットは、Postモデルの名前とトピック属性の一括割り当てを実行します。

Post.new(:name => "John"、:topic => "Something")

Post.create(:name => "John"、:topic => "Something")

Post.update_attributes(:name => "John"、:topic => "Something")

これが機能するためには、モデルで、渡すハッシュの各属性に一括割り当てを許可する必要があります。

これが失敗する状況は2つあります。

:nameを含まないattr_accessible宣言があります

:nameを含むattr_protectedがあります

最近、一括割り当てを成功させるために、属性をattr_accessibleを介して手動でホワイトリストに登録する必要があることがデフォルトになりました。これ以前は、属性が明示的にattr_protectedにブラックリストに登録されているか、他の属性がattr_acessibleにホワイトリストに登録されていない限り、デフォルトで割り当て可能でした。

于 2014-02-21T13:17:43.320 に答える
0

権限の問題である場合は、次を追加できます。

Spree::Product.class_eval do 

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

end

特定のモデルのデフォルトとしてマークすると、一括割り当て警告メッセージが削除されます。

于 2013-12-11T06:13:45.860 に答える