如何基于定制模型方法查询Rails / ActiveRecord模型?

问题描述 投票:0回答:2

免责声明:我是Rails的新手。

我的模型中有一个要查询的自定义方法。该方法称为“ active?”,返回一个布尔值。我真正想做的是创建以下形式的ActiveRecord查询:

Users.where(:active => true)

自然地,当我按原样运行上面的列时,我得到的是“列不存在,所以我的问题如下:

除了在模型上的自定义方法,而不是在实际的DB列上,我该如何做以上等同工作?

ruby-on-rails ruby-on-rails-3 model rails-activerecord
2个回答
1
投票

而不是使用主动?方法,您将有一个范围来帮助查找匹配的项目。

这样的事情...

def self.active
  joins(:parent_table).where(:archived => false).where("? BETWEEN parent_table.start_date AND parent_table.end_date ", Time.now)
end

而且,您应该能够这样做

def active?
  User.active.exists?(self)
end

如果您想将此范围用于实例测试。


0
投票

一种简单的方法是将select方法与现有模型方法一起使用。

Users.select{|u| u.active}

这将返回一个数组,因此您将无法在其上使用Active Record Query方法。要将结果作为ActiveRecord_Relation对象返回,可以使用where函数查询具有匹配ID的实例:

class User < ActiveRecord::Base

  def self.active
    active_array = self.select{|r| r.active?}
    active_relation = self.where(id: active_array.map(&:id))
    return active_relation
  end

end
© www.soinside.com 2019 - 2024. All rights reserved.