🧑🏭
【備忘録】Railsで使う書き方⑥~delegate~
気がついたら大分間があいてしまいました…
delegate
こんなコードがありました。(上のURLの例を元に書いています)
model.rb
class User < ApplicationRecord
has_one :profile
end
class Profile < ApplicationRecord
belongs_to :user
end
user = User.new(...)
user_profile_address = user.profile.address #←これが何度も出でくる
何度も同じコードが出てくることはメンテナンスも大変になるし、美しくありません。
そこでdelegateを使用します。
model.rb
class User < ApplicationRecord
has_one :profile
delegate :address, to: :profile
end
class Profile < ApplicationRecord
def address
profile.address
end
end
user = User.new(...)
user_profile_address = user.address
このように記述することで記述量を減らすことができます。
delegateの追加情報
オプションとしてprefixをつけることが可能です。
model.rb
class User < ApplicationRecord
has_one :profile
delegate to: :method_name
1. delegate :address, to: :profile, prefix: :true
2. delegate :address, to: :profile, prefix: :admin
end
class Profile < ApplicationRecord
def address
profile.address
end
end
user = User.new(...)
1.user_profile_address = user_address
2.user_profile_address = admin_address
allow_nilをつけることも可能です。
ぼっち演算子のようにnilを返すことができます。
Discussion