web-dev-qa-db-ja.com

attr_accessibleはRails 4ではどのように使われますか?

attr_accessibleは私のモデル内ではもう機能しないようです。

Rails 4で大量割り当てを可能にする方法は何ですか?

256
user2532974

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を使用したい場合は、Gemfileprotected_attributes を追加する必要があります。そうでなければ、あなたはRuntimeErrorに直面するでしょう。

444

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
22
edikgat

使用できます

params.require(:person).permit(:name, :age)

personがModelの場合は、このコードをperson_paramsメソッドに渡し、createメソッドまたはelseメソッドのparams [:person]の代わりに使用できます。

4
Hardik Hardiya

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
1
Sid

Rails 5のアップデート:

gem 'protected_attributes' 

もう動作しないようです。しかし与える:

gem 'protected_attributes_continued'

試してみてください。

0
miklki14567