如何在没有数据表列的情况下应用类方法作用域



免责声明:第一个问题,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
...

相关内容

  • 没有找到相关文章

最新更新