このちょっとした Ruby コードをリファクタリングして見苦しくないようにするにはどうすればよいでしょうか。
def default_item_price(user)
if project.present?
if project.hourly_rate?
project.hourly_rate
elsif project.person.hourly_rate?
project.person.hourly_rate
elsif project.person.organisation && project.person.organisation.hourly_rate?
project.person.organisation.hourly_rate
else
user.preference.hourly_rate
end
else
user.preference.hourly_rate
end
end
私は Ruby プログラミングをあまりやったことがないので、最後の 6 行をどうにかして DRY できるのではないかと考えています。助けてくれてありがとう!
これらは私のモデルです:
class User
has_many :people
end
class Person
belongs_to :user
has_many :projects
def real_hourly_rate
hourly_rate || organisation.real_hourly_rate
end
end
class Project
belongs_to :person
has_many :invoices
def real_hourly_rate
hourly_rate || person.real_hourly_rate
end
end
class Invoice
belongs_to :project
def default_item_price(user)
project.real_hourly_rate || user.preference.hourly_rate
end
end