Ruby通过自定义方法查找?

时间:2014-07-04 04:44:45

标签: ruby-on-rails ruby activerecord methods find

我试图找出一种方法来搜索ActiveRecord模型,通过其常用的rails 3.0语法与自定义方法混合。

例如:

class User < ActiveRecord::Base
 def custom_method
   if [...]
     return true
   else 
     return false
   end     
 end
end

我想用这样的方式使用ActiveRecord来调用它:

User.find(:all).where(custom_method is true)

有什么方法可以解决这个问题吗?如果语法对于我想传达的内容不准确,请道歉。

编辑:我想澄清所使用的custom_method相当复杂,因此首选调用它而不是将其转换为sql语法。

1 个答案:

答案 0 :(得分:4)

这通常使用范围或类方法

来实现
class User < ActiveRecord::Base
  scope :active, -> { where(status: 'active') }

  def self.hidden
    where(status: 'hidden')
  end
end

# Both a scope and class method are then used the the same way
User.active # User.where(status: 'active')

User.where(foo: 'bar').active # User.where(foo: 'bar', status: 'active')
User.where(foo: 'bar').hidden # User.where(foo: 'bar', status: 'hidden')

如果custom_method过于复杂或依赖于未存储在数据库中的属性,则可能需要过滤内存中的项目。

User.where(foo: 'bar').to_a.select(&:custom_method)