delegateメソッドとは
delegateメソッドとは
メソッドを簡単に委譲できるメソッド。
例えば、Userモデル
ログイン情報があり、それに関連する名前などの情報はProfilemモデル
があったとする。
class User < ApplicationRecord
has_one :profile
end
profile
の中にある、name
要素を取り出したい時、user.profile.name
のようにメソッドチェーンしたものを書く。
しかし毎回メソッドチェーンしたものを呼び出すのも面倒なので、
user.name
にしたい。そんな時にdelegate
を使う。
なお下記はdelegate
を使用しない場合の記述。
class User < ApplicationRecord
has_one :profile
def name
profile.name
end
end
使い方
delegate :メソッド名(カラム名), to: :関連付けしているモデル名
class User < ApplicationRecord
has_one :profile
delegate :name, to: :profile
end
delegate
には複数のメソッドを指定できる。
#基本の型
delegate :name, :age, :address, :twitter, to: :profile
オプション
prefix
delegate
はパブリックメソッドとして定義するので、もし重要なデータなどを指定してしまうと、可能性として低いが面倒なことが起きることもあるので、privateメソッド
としてdelegate
を定義することが可能になっている。
delegate :date_of_birth, to: :profile, private: true
↑上記と同義になり、アクセスできる範囲を狭めることが可能。
private
def date_of_birth
user.date_of_birth
end
allow_nil
:allow_nilオプション
を付与すると、profile
がnil
だった場合に、user.name
は例外ではなく、nil
を返すようにできる。
delegate :name, to: :profile, allow_nil: true
下記のようにぼっち演算子をつけたメソッドを定義したものと同義になる。
def name
profile&.name
end
参考記事
Railsガイド
【Ruby on Rails】delegateの使い方【委譲は便利】
【Rails】delegateで省エネする方法を、公式リファレンスから理解する
Author And Source
この問題について(delegateメソッドとは), 我々は、より多くの情報をここで見つけました https://qiita.com/mmaumtjgj/items/1f4fc7431b5bcb39e33c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .