2013-12-12 10 views
23

モデルのコード内に属性アクセサー/リーダー/ライターが表示されることがあります。ビュー/コントローラコードから属性を更新できるようにするには、これらは必要ですか?Railsでattr_accessorが必要なのはなぜですか?

私は初心者ですので、基本的なアプリケーションについて実際に話しています。

答えて

52

attr_accessorは、Rubyのコア機能であり、ゲッターとセッターメソッドでインスタンス変数を生成するために使用されます。基本的なRubyではその使用は決して必要ありません(それは便利です)。

ActiveRecordモデルの場合、データ列に対してActiveRecordによってゲッターとセッターが既に生成されています。 attr_accessorは必要ではなく、望ましいです。

永続化する必要がない追加のインスタンスデータ(データベース列ではない)がある場合は、attr_accessorを使用して、数行のコードを節約できます。

Railsコードで頻繁に見られ、attr_accessorと混同されている同様の名前のattr_accessibleは、ActiveRecordモデル内での質量割り当てを制御する非推奨の方法です。 Rails 4はそれをそのままの形でサポートしていません。これはStrong Parametersに置き換えられました。これにより、より詳細な制御が可能になります。

24

attr_accessorを宣言した場合は、virtual attributeとして使用できます。これは、基本的にデータベースに保持されていないモデルの属性です。

例の場合:Userモデルでattr_accessor :passwordを宣言して、新しいユーザーフォームのフィールドとして使用できるようにします。対応するcreateアクションでパスワードを受け取ったら、hashed_passwordを派生させ、それをデータベースに保存し、指定されたpasswordを破棄することができます(これは要求の最後に自動的に行われます)。

3

一般に、attr_accessorは、SQLテーブルの実際の列ではないモデルに何かを飾ることをお勧めします。 Rails 4かどうか。これにより、モデルの内容と持続する内容を明確に理解できます。

関連する問題