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' }
# RansackMongo::Query.parse(params[:q])
# => { name: 'Pablo', '$or' => { middle_name: /Cantero/i, last_name: /Cantero/i } }
# GET /customers
def index
selector = RansackMongo::Query.parse(params[:q])
# Mongo Ruby Driver
@customers = db['customers'].find(selector)
# Moped
@customers = session[: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' }
RansackMongo::Query.parse(params[:q])
# => { name: 'Pablo', '$or' => { middle_name: /Cantero/i, last_name: /Cantero/i } }
You can use parse!
for stricter validations. This method will raise an exception if a query cannot be produced.
# xpto isn't a valid predicate
RansackMongo::Query.parse(name_xpto: 'Pablo')
# => {}
RansackMongo::Query.parse!(name_xpto: 'Pablo')
# => RansackMongo::MatcherNotFound: No matchers found. To allow empty queries use .parse 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