attr_accessible
私のモデルでは機能しなくなったようです。
Rails 4で一括割り当てを許可する方法は何ですか?
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アクションコントローラガイドで強力なパラメータの詳細を確認できます。
注:引き続き使用する場合はattr_accessible
、にを追加protected_attributes
する必要がありますGemfile
。それ以外の場合は、が表示されますRuntimeError
。
RuntimeError in MicropostsController#index 'attr_accessible' is extracted out of Rails into a gem. Please use new recommended protection model for params(strong_parameters) or add 'protected_attributes' to your Gemfile to use old one.
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]の代わりに使用できます。
Rails 5のアップデート:
gem 'protected_attributes'
もう動作していないようです。しかし与える:
gem 'protected_attributes_contined'
試してみてください。
attr_accessible
が削除される必要があると言っていませんでした。それを守ったらどうなるの?