2

Ruby on Railsガイドに従うと、開発者は保護されたフィールドを一括割り当てできませんが、それを実行しようとしても例外は発生しません。しかし、私の場合、アプリケーションnewのメソッドを介して異なるパラメータを一括割り当てします。rails

@edition = Edition.new params[:edition]

次の例外を発生させます。

ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: price

なんで?私は何かを間違って理解しましたか?一括割り当て例外を取得しない方法ですか?割り当ての前にハッシュから保護された属性を削除するのは便利ではないと思います。

更新:エディションモデル:

class Edition < ActiveRecord::Base
  attr_accessible :title, :description
  attr_protected :price
end

params[:edition].inspect

{"title"=>"t", "description"=>"d", "price"=>"123"}
4

1 に答える 1

3

次のように入力して、一括割り当てで保護された属性の価格を割り当てようとしています

@edition = Edition.new params[:edition]

これは変数の一括割り当てであり、編集によると params[:edition] には、コードによれば一括割り当てできない変数 price があります。

これを修正するには、あなたがしたくないと思う価格の保護を削除するか、保護されていない変数のみを new で一括割り当てしてから、保護された変数を割り当てる必要があります。それで:

    @edition = Edition.new params[:edition].except("price")
    @edition.price = params[:edition]['price']

また@edition = Edition.new params[:edition], :without_protection => true

編集: news.ycombinator.com/item?id=3780963 Rails 3.23 では、デフォルトで検証が厳密になり、その例外が発生します。ドキュメントが古くなっています。

于 2012-06-13T17:35:56.993 に答える