Ruby on Rails delegate model
紀錄 Rails 開發,在 Model 上使用 delegate 的情境。
紀錄 Rails 開發,在 Model 上使用 delegate 的情境。
Provides a delegate class method to easily expose contained objects’ public methods as your own.
間單來說,可以將 method 委派給指定的 class
範例
class Project < ApplicationRecord
belongs_to :organization
end
class Organization < ApplicationRecord
has_many :projects
end
開發上經常會這樣呼叫
@project.organization.title
如果使用了 delegate 委派,就會幫你產生一些 method。
如以下範例:
class Project < ApplicationRecord
delegate :title, to: :organization, prefix: true, allow_nil: true
end
@project.organization_title
也可以使用 delegate 委派給相關的 class
例如:我們拆分一個 class ProjectMoney 專門來整理計算金額相關的 method,方便後續開發管理邏輯。
class Project < ApplicationRecord
delegate :normal_money_pledged, to: :money
def money
@money ||= ProjectMoney.new(self)
end
end
class ProjectMoney
attr_reader(:project)
def initialize(project)
@project = project
end
def normal_money_pledged
#...
end
end