Ruby find by custom method?

activerecord, find, methods, ruby, ruby-on-rails

Solution

This is typically implemented with a scope or with a class method

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')

If the `custom_method` is too complex or relies on properties not stored in the database, you may need to resort to filtering the items in memory.

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

Problem

I am trying to figure out a way to search on an ActiveRecord model by its usual rails 3.0 syntax mixed in with custom methods. For example: ``` class User < ActiveRecord::Base def custom_method if [...] return true else return false end end end ``` and I'd like to envoke this using ActiveRecord in such a way: ``` User.find(:all).where(custom_method is true) ``` Any ways to go about this? Apologies if the syntax isn't accurate for what I'm trying to convey. EDIT: I'd like to clarify that `custom_method` used is fairly complex, so calling it instead of converting it to a sql syntax would be preferred.

Original source