我只想选择具有符合特定条件的计算属性的记录。
客户模型使用lateness
方法计算值与当前时间之间的差异。这部分不是问题。
这可以从客户控制器开始工作,但实际上很重要:
def index
customers = Customer.all
@customers = []
customers.each do |customer|
if customer.lateness > 5
@customers.push(customer)
end
end
end
必须有更优雅的方式,我在ActiveRecord查询界面上阅读整个文档,无法找到任何内容。
答案 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}