免责声明:第一个问题,rails新手,请在回复中详细说明
我正试图用一个类方法创建一个过滤器,该方法基于对数据表中的两列执行的简单等式。我不知道如何让查询/过滤器运行,以便它根据等式的结果过滤结果。这是我的表格的缩写:
t.integer “horizontal_length”
t.integer “thirty_day_flow_rate”
我想要一个基于以下等式的过滤器:(thirty_dy_flow_rate/horizontal_length),这样用户就可以说,"给我看30天流量大于每英尺长度‘x’桶的所有井">
我在我的模型中创建了一个方法来保存方程,当我在Well对象上调用它时,它运行良好:
class Well < ActiveRecord::Base
def flow_rate_per_foot
thirty_day_flow_rate / horizontal_length
end
然而,当我想根据等式的结果创建一个过滤器时,我不确定如何进行。我尝试了这样的方法,使用从控制器传入的mimimum_flow_rate参数:
class Well < ActiveRecord::Base
def self.flow_rate_filter(minimum_flow_rate)
if mimimum_flow_rate.present?
where(‘flow_rate_per_foot >= ?', minimum_flow_rate)
else
Well.all
end
end
显然,这不起作用,因为flow_rate_per_foot不是我的数据表中要调用的列。我该如何解决这个问题?有其他方法可以解决这个问题吗?我想对许多不同的方程和列进行这种类型的过滤,所以任何解决方案都需要灵活。谢谢
作为参考,我的控制器如下所示,我设置的直接从数据表运行的其他过滤器工作正常:
def index
@wells = Well.flow_rate_filter(params[:mimimum_flow_rate])
end
谢谢!
您可以尝试使用作用域,也可以像一样手动查询
@wells=井。其中("(30_day_flow_rate/horizontal_length)>=?",params[:mimimum_flow_rate])
我最初想做的似乎不可能。
我通过在表中创建一个新字段来保存我最初放在flow_rate_per_foot方法中的"flow_rate_prer_foot"计算,从而解决了这个问题。
一旦计算结果有了自己的字段,我就可以根据结果进行过滤、搜索和排序,这是我的总体目标。
在模型中添加此行
class Well < ActiveRecord::Base
attr_accessor :minimum_flow_rate
...