21
20

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 5 years have passed since last update.

Railsでdelegateを使って簡単にメソッドにアクセスする

Last updated at Posted at 2018-10-25

delegateとは

Railsガイドによると

delegateマクロを使用すると、メソッドを簡単に委譲できます。

というものらしいです。


だいぶ無理がありますが、下記の条件のもと、delegateメソッドを使って移譲を試してみます

  • Student(生徒)モデルと Address(住所)モデルがあり、生徒はそれぞれ1つの住所を持つとする
  • この時、Addressモデルはcountry, prefecture, city, townなどのカラムをもっている
class Student < ApplicationRecord
  has_one : address
end

class Address < ApplicationRecord
  belongs_to :student

   def country_name
    "#{country}に住んでいます"
  end

  def prefecture_name
    "#{prefecture}に住んでいます"
  end

  def city_name
    "#{city}に住んでいます"
  end

  def town_name
    "#{town}に住んでいます"
  end
end

この場合生徒の住んでいる市を知りたい、とか町だけの情報を取ってきたい時があるとすると、
普通だと
student.address.city とか student.address.townとしなければなりません。

しかし、下記のようにdelegateメソッドを使用して移譲してあげると

class Student < ApplicationRecord
  has_one :address

  delegate :country_name, :prefecture_name, :city_name, :town_name, to: :address

student.city_name や student.town_name で
生徒の市や町の情報を取得することができます。

今回の例のような形では使うことは少ないと思いますが、
複雑なメソッドを切り出したい時など、処理が複雑になってくると、
delegateメソッドは非常に使い勝手のいいメソッドだと思います。

ただ、影響範囲が見えずらくなるきっかけになるので、使いすぎには注意が必要そう。。。

21
20
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
21
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?