我有以下两种模式:用户和成本。 用户有很多费用。成本定义用户的成本/小时,并具有从日期字段。
我想有可能询问像这样的用户的当前费用:
User.last.costs.current
为此,我可以在Cost模型中创建此范围:
scope :current, -> { where('"from" <= ?', Date.today).order('"costs"."from" desc').limit(1) }
这有效,但需要这种语法:
User.last.costs.current.first
我个人不喜欢。
我相信有几种方法可以解决这个问题:
1)向User模型添加一个方法,该方法将获得当前成本。
2)向Cost中添加一个类方法,该方法将获得当前成本。但是,这将导致以下语法获得当前成本:
Cost.get_current_cost_by_user(User.last)
最后我的问题是:是否可以在Cost模型上创建一个允许我这样做的类方法:
User.last.costs.current
并返回当前费用?
如果不可能实现这个最佳做法:用户模型上的方法或需要用户作为参数的成本上的类方法?
答案 0 :(得分:0)
是的,你可以这样做,就像User.last.costs.current # => Cost
一样。问题是,这也可以像Cost.current
一样调用,这没有多大意义。
class Cost < AR
def self.current
where('"from" <= ?', Date.today).order('"costs"."from" desc').first
end
end