attr_accessible
は私のモデル内ではもう機能しないようです。
Rails 4で大量割り当てを可能にする方法は何ですか?
Rails 4は 強いパラメータ を使うようになりました。
属性の保護はコントローラで行われるようになりました。これは一例です。
class PeopleController < ApplicationController
def create
Person.create(person_params)
end
private
def person_params
params.require(:person).permit(:name, :age)
end
end
モデルにattr_accessible
を設定する必要はもうありません。
accepts_nested_attributes_for
を扱う強力なパラメータでaccepts_nested_attribute_for
を使用するためには、ネストされたどの属性をホワイトリストに含めるかを指定する必要があります。
class Person
has_many :pets
accepts_nested_attributes_for :pets
end
class PeopleController < ApplicationController
def create
Person.create(person_params)
end
# ...
private
def person_params
params.require(:person).permit(:name, :age, pets_attributes: [:name, :category])
end
end
キーワードは一目瞭然ですが、念のため、強いパラメータ についての詳細はRails Action Controllerガイド を参照してください。
注:まだattr_accessible
を使用したい場合は、Gemfile
に protected_attributes
を追加する必要があります。そうでなければ、あなたはRuntimeError
に直面するでしょう。
Attr_accessibleを好めば、Rails 4でも使えます。あなたはそれをgemのようにインストールするべきです:
gem 'protected_attributes'
その後、Rails 3のようにモデルでattr_accessibleを使用できます。
また、私はそれが最善の方法だと思います - 一括代入を扱い、ネストされたオブジェクトを保存するためにフォームオブジェクトを使うこと、そしてprotected -attributes gemをそのまま使うこともできます
class NestedForm
include ActiveModel::MassAssignmentSecurity
attr_accessible :name,
:telephone, as: :create_params
def create_objects(params)
SomeModel.new(sanitized_params(params, :create_params))
end
end
使用できます
params.require(:person).permit(:name, :age)
personがModelの場合は、このコードをperson_paramsメソッドに渡し、createメソッドまたはelseメソッドのparams [:person]の代わりに使用できます。
1)アプリケーションのGemfileにこの行を追加してRails 4.0を処理できるようにDeviseを更新します。
gem 'devise', '3.0.0.rc'
次に実行します。
$ bundle
2)attr_accessible
の古い機能をRails 4.0にもう一度追加します。
attr_accessible
を使用し、これをコメントアウトしないでください。
この行をアプリケーションのGemfileに追加します。
gem 'protected_attributes'
次に実行します。
$ bundle
Rails 5のアップデート:
gem 'protected_attributes'
もう動作しないようです。しかし与える:
gem 'protected_attributes_continued'
試してみてください。