首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在类似作用域的活动记录上使用的类方法。

在类似作用域的活动记录上使用的类方法。
EN

Stack Overflow用户
提问于 2016-02-14 23:53:44
回答 1查看 31关注 0票数 0

我有以下两种模式:用户和成本。用户has_many成本。成本定义用户的成本/小时,并有一个from日期字段。

我想问一下这样一个用户目前的成本:

代码语言:javascript
运行
复制
User.last.costs.current

要做到这一点,我可以在成本模型中确定这个范围:

代码语言:javascript
运行
复制
scope :current, -> { where('"from" <= ?', Date.today).order('"costs"."from" desc').limit(1) }

这是可行的,但需要这样的语法:

代码语言:javascript
运行
复制
User.last.costs.current.first

我个人不喜欢。

我相信有几种方法可以解决这个问题:

1)在用户模型中添加一种计算当前成本的方法。

2)在成本中添加一个类方法,得到当前成本。然而,这将导致以下语法以获得当前成本:

代码语言:javascript
运行
复制
 Cost.get_current_cost_by_user(User.last)

最后,我的问题是:是否可以在成本模型上创建一个类方法,允许我这样做:

代码语言:javascript
运行
复制
User.last.costs.current

还现在的费用?

如果不可能实现这一点,最好的做法是:用户模型上的方法,或者要求用户作为参数的成本类方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-14 23:59:24

是的,你可以这样做,就像User.last.costs.current # => Cost一样。问题是,这也可以被称为Cost.current,这没有多大意义。

代码语言:javascript
运行
复制
class Cost < AR
  def self.current
    where('"from" <= ?', Date.today).order('"costs"."from" desc').first
  end
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35399525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档