- README: https://github.com/david-mccullars/activerecord-where-any-of
- Documentation: http://www.rubydoc.info/github/david-mccullars/activerecord-where-any-of
- Bug Reports: https://github.com/david-mccullars/activerecord-where-any-of/issues
Provides a mechanism for OR'ing together one or more AREL relations. Normally when
one performs SomeModel.where(condition_1).where(condition_2)
, the result is to AND
those conditions together. Unfortunately, there is no good way of OR'ing them without
converting the conditions into manual SQL. This mixin addresses that issue.
where_any_of
accepts any number of relations, symbols, or strings. For symbols and strings,
the corresponding method is called (unscoped) which is expected to return a relation.
class SomeRecord < ActiveRecord::Base
default_scope do
where('extra is not null')
end
def self.owned_by(user)
where(:owner => user)
end
def self.active
where(:active => true)
end
def self.pending
where(:pending => true)
end
def self.active_or_pending
# Use symbols to make sure calls are unscoped
where_any_of(:active, :pending)
end
end
puts SomeRecord.owned_by('Fred').active_or_pending.to_sql
SELECT "some_records".* FROM "some_records" WHERE "some_records"."owner" = 'Fred' AND (extra is not null) AND (("some_records"."active" = 't' OR "some_records"."pending" = 't'))
puts SomeRecord.where_any_of(
SomeRecord.where(:extra => 'A'),
SomeRecord.owned_by('Bill'),
'active'
).to_sql
SELECT "some_records".* FROM "some_records" WHERE (extra is not null) AND ((("some_records"."extra" = 'A' OR "some_records"."owner" = 'Bill') OR "some_records"."active" = 't'))
In your app, add this line to your Gemfile
:
gem "activerecord-where-any-of"
Then type bundle
.