Ransack Mongo is based on Ransack, but for MongoDB.
With Ransack Mongo you can convert query params into Mongo queries.
Add this line to your application's Gemfile:
gem 'ransack_mongo'
And then execute:
$ bundle
Or install it yourself as:
$ gem install ransack_mongo
# GET /customers?q[name_eq]=Pablo&q[middle_name_or_last_name_cont]=Cantero
# params[:q]
# => { name_eq: 'Pablo', middle_name_or_last_name_cont: 'Cantero' }
# query.to_query(params[:q])
# => { name: 'Pablo', '$or' => { middle_name: /Cantero/i, last_name: /Cantero/i } }
# GET /customers
def index
query = RansackMongo::Query.new
selector = query.to_query(params[:q])
# Mongo Ruby Driver
@customers = db.customers.find(selector)
# Mongoid
@customers = Customer.where(selector)
end
- eq
- not_eq
- cont
- in
- gt
- lt
- gteq
- lteq
You can also combine predicates for OR queries.
query_param = { name_eq: 'Pablo', middle_name_or_last_name_cont: 'Cantero' }
query.to_query(params[:q])
# => { name: 'Pablo', '$or' => { middle_name: /Cantero/i, last_name: /Cantero/i } }
You can use to_query! for stricter validations. This method will raise an exception if a query cannot be produced.
# xpto isn't a valid predicate
query.to_query(name_xpto: 'Pablo')
# => {}
query.to_query!(name_xpto: 'Pablo')
# => RansackMongo::MatcherNotFound: No matchers found. To allow empty queries use .to_query instead
- Fork it ( https://github.com/phstc/ransack_mongo/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request