0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Ruby on Rails の ActiveRecord における attr_accessor と attribute メソッドの違い

Posted at

Ruby on RailsでActiveRecordのモデルに属性を追加する時にattr_accessorattributeという2つのメソッドが使えますが、この2つの違いって何?ということを簡単にまとめました。

結論

Ruby on RailsのActiveRecord::Attributesモジュールのメソッドであるattributeを使用してモデルに追加した属性は、

  • その値が変更された時にダーティフラグが立つ、
  • 定義時にキャスト型を指定する事により、モデルがインスタンス化される時に型をオーバーライドできる(第2引数)、
  • デフォルト値を指定できる(第3引数)、

等の特徴を持ちます。一方で、Rubyの組み込みライブラリであるModuleクラスのメソッドattr_accessorを使用した場合は、単純にそのモデルにアクセサを定義するのみであり、以下のコードと完全に等価となります。

# attr_accessor :name
def name
  @name
end
def name=(val)
  @name = val
end

Railsでsaveメソッドを使用するとダーティフラグにより何を保存すべきかを自動で判別してくれたりするので、単にそのインスタンスが存在する時に値が保持できれば良いならばattr_accessorで十分ですが、モデルの状態に関わるような属性を追加したい場合はattributeを上手く使うとコードがスッキリ書けるということになりそうです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?