ActiveRecord'其中'子句使用函数

时间:2015-05-08 17:23:37

标签: ruby-on-rails ruby activerecord

我正在尝试在ActiveRecord :: Relation上应用过滤器。我想申请一个' where'用于进行以下调用的子句(或等效物)。

record = Record.all
record.where(record.remaing_units > 5)

我知道这很容易编写一个函数并传递2个参数但我想知道是否有更简洁的方法来做,更多'其中'等。

编辑:remaining_units是记录类计算2个字段之间减法的方法。

2 个答案:

答案 0 :(得分:4)

您不能将方法用作mysql查询。

您可以运行与sql方法相同的功能:

Record.where('a + b > 5')

或者从db获取所有记录并使用ruby select方法:

Record.all.select{ |r| r. remaing_units > 5 }

**您可以尝试Squeel gem以获得更好的查询

答案 1 :(得分:1)

class Record < ActiveRecord::Base
  scope :remaining_space, ->(n) {
    where("records.field_1 - records.field_2 > ?", n)
  }
end

Record.remaining_space(5)