我有以下两种模式:用户和成本。用户has_many成本。成本定义用户的成本/小时,并有一个from日期字段。
我想问一下这样一个用户目前的成本:
User.last.costs.current
要做到这一点,我可以在成本模型中确定这个范围:
scope :current, -> { where('"from" <= ?', Date.today).order('"costs"."from" desc').limit(1) }
这是可行的,但需要这样的语法:
User.last.costs.current.first
我个人不喜欢。
我相信有几种方法可以解决这个问题:
1)在用户模型中添加一种计算当前成本的方法。
2)在成本中添加一个类方法,得到当前成本。然而,这将导致以下语法以获得当前成本:
Cost.get_current_cost_by_user(User.last)
最后,我的问题是:是否可以在成本模型上创建一个类方法,允许我这样做:
User.last.costs.current
还现在的费用?
如果不可能实现这一点,最好的做法是:用户模型上的方法,或者要求用户作为参数的成本类方法?
发布于 2016-02-14 23:59:24
是的,你可以这样做,就像User.last.costs.current # => Cost
一样。问题是,这也可以被称为Cost.current
,这没有多大意义。
class Cost < AR
def self.current
where('"from" <= ?', Date.today).order('"costs"."from" desc').first
end
end
https://stackoverflow.com/questions/35399525
复制相似问题