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.