Rails仅获取具有计算属性的记录

时间:2015-04-19 17:35:23

标签: ruby-on-rails ruby activerecord

我只想选择具有符合特定条件的计算属性的记录。

客户模型使用lateness方法计算值与当前时间之间的差异。这部分不是问题。

这可以从客户控制器开始工作,但实际上很重要:

def index
  customers = Customer.all
  @customers = []

  customers.each do |customer|
    if customer.lateness > 5
      @customers.push(customer)
    end
  end
end

必须有更优雅的方式,我在ActiveRecord查询界面上阅读整个文档,无法找到任何内容。

2 个答案:

答案 0 :(得分:1)

您不能将使用Ruby编写的动态属性作为Active Record过滤条件的一部分。

但是,在您的特定情况下,除非方法中发生的事情多于您描述的内容,否则您可以让数据库进行计算。

例如,如果您的lateness方法如下:

def lateness
  due_date - Time.now
end

如果使用Postgres,你可以创建一个where子句(特定于数据库,所以要小心),如下所示:

where('due_date::date - current_date() > ?', 5)

不需要像那样注入5,但是如果你想要变量,你就是这样做的。

答案 1 :(得分:0)

计算是在模型中吗?

然后

@customers = Customer.all.select{|c| c.lateness > 5}