Description
Support #or query method in Rails 3, 4, 5
rails_or alternatives and similar gems
Based on the "ORM/ODM Extensions" category.
Alternatively, view rails_or alternatives based on common mentions on social networks and blogs.
-
ActsAsTaggableOn
A tagging plugin for ActiveRecord that allows for custom tagging along dynamic contexts. -
Ancestry
Organise ActiveRecord model into a tree structure using a variation on the materialised path pattern. -
Audited
Audited is an ORM extension for ActiveRecord & MongoMapper that logs all changes to your models. -
Paranoia
A re-implementation of acts_as_paranoid for Rails 3 and 4, using much, much, much less code. -
PublicActivity
Provides easy activity tracking for your ActiveRecord, Mongoid 3 and MongoMapper models in Rails 3 and 4. Similar to Github's Public Activity. -
Awesome Nested Set
Awesome Nested Set is an implementation of the nested set pattern for ActiveRecord models. -
Closure Tree
Easily and efficiently make your ActiveRecord models support hierarchies using a Closure Table. -
Merit
Adds reputation behavior to Rails apps in the form of Badges, Points, and Rankings for ActiveRecord or Mongoid. -
marginalia
Attach comments to your ActiveRecord queries. By default, it adds the application, controller, and action names as a comment at the end of each query. -
ActsAsParanoid
ActiveRecord plugin allowing you to hide and restore records without actually deleting them. -
ranked-model
A modern row sorting library for ActiveRecord. It uses ARel aggressively and is better optimized than most other libraries. -
Acts As Commentable
Provides a single Comment model that can be attached to any model(s) within your app. -
Acts As Commentable with Threading
Similar to acts_as_commentable; however, utilizes awesome_nested_set to provide threaded comments. -
bulk_insert
A little ActiveRecord extension for helping to insert lots of rows in a single insert statement. -
activerecord-multi-tenant
Rails/ActiveRecord support for distributed multi-tenant databases like Postgres+Citus -
ActsAsTree
Extends ActiveRecord to add simple support for organizing items into parent-children relationships. -
ActiveImporter
Define importers that load tabular data from spreadsheets or CSV files into any ActiveRecord-like ORM. -
Rails PG Extras
Rails PostgreSQL database performance insights. Locks, index usage, buffer cache hit ratios, vacuum stats and more. -
BabySqueel
BabySqueel provides a Squeel-like query DSL for Active Record while hopefully avoiding the majority of the version upgrade difficulties via a minimum of monkeypatching -
ActiveValidators
An exhaustive collection of off-the-shelf and tested ActiveModel/ActiveRecord validations. -
activerecord_json_validator
🔩 ActiveRecord::JSONValidator makes it easy to validate JSON attributes against a JSON schema. -
data_miner
Download, pull out of a ZIP/TAR/GZ/BZ2 archive, parse, correct, and import XLS, ODS, XML, CSV, HTML, etc. into your ActiveRecord models. -
mini_record
ActiveRecord meets DataMapper, with MiniRecord you are be able to write schema inside your models.
Get performance insights in less than 4 minutes
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest. Visit our partner's website for more details.
Do you think we are missing an alternative of rails_or or a related project?
README
RailsOr
rails_or
is a Ruby Gem for you to write cleaner OR
query.
It will use built-in or
method, which was added in Rails 5, when possible, so that you don't need to worry about that it will polulate active_model
. Otherwise, it implements or
method for Rails 3 and Rails 4.
Supports
- Ruby 2.2 ~ 2.7
- Rails 3.2, 4.2, 5.0, 5.1, 5.2, 6.0
Installation
Add this line to your application's Gemfile:
gem 'rails_or'
And then execute:
$ bundle
Or install it yourself as:
$ gem install rails_or
Usage
Same as Rails 5's #or method
Person.where(name: 'Pearl').or(Person.where(age: 24))
# is the same as
Person.where("name = ? OR age = ?", 'Pearl', 24)
Clearer Syntax
# Before
user = User.where(account: account).or(User.where(email: account)).take
# After
user = User.where(account: account).or(email: account).take
# Before
class Post < ActiveRecord::Base
scope :not_expired, ->{ where(end_time: nil).or(Post.where('end_time > ?', Time.now)) }
end
# After
class Post < ActiveRecord::Base
scope :not_expired, ->{ where(end_time: nil).or('end_time > ?', Time.now) }
end
No need to repeat writing Model.joins(XXX).where(...)
# Before
User.joins(:posts).where(id: 2)
.or(User.joins(:posts).where('posts.title = ?',"title"))
.or(User.joins(:posts).where('posts.created_at > ?', 1.day.ago))
# After
User.joins(:posts).where(id: 2)
.or('posts.title': "title")
.or('posts.created_at > ?', 1.day.ago)
Support passing Hash
/ Array
/ String
as parameters
Person.where(name: 'Pearl').or(age: 24)
Person.where(name: 'Pearl').or(['age = ?', 24])
Person.where(name: 'Pearl').or('age = ?', 24)
Person.where(name: 'Pearl').or('age = 24')
Other convenient methods
or_not
(Only supports in Rails 4+)
Company.where.not(logo_image1: nil)
.or_not(logo_image2: nil)
.or_not(logo_image3: nil)
.or_not(logo_image4: nil)
or_having
Order.group('user_id')
.having('SUM(price) > 1000')
.or_having('COUNT(*) > 10')
Examples
Let A = {id: 1}
, B = {account: 'a'}
, and C = {email: 'b'}
A && (B || C)
u = User.where(A)
u.where(B).or(u.where(C))
# =>
# SELECT `users`.* FROM `users`
# WHERE `users`.`id` = 1 AND (`users`.`account` = 'a' OR `users`.`email` = 'b')
(B || C) && A
User.where(B).or(C).where(A)
# =>
# SELECT `users`.* FROM `users`
# WHERE (`users`.`account` = 'a' OR `users`.`email` = 'b') AND `users`.`id` = 1
A && B || A && C
User.where(A).where(B).or(User.where(A).where(C))
# =>
# SELECT `users`.* FROM `users`
# WHERE (`users`.`id` = 1 AND `users`.`account` = 'a' OR `users`.`id` = 1 AND `users`.`email` = 'b')
A && B || C
User.where(A).where(B).or(C)
# =>
# SELECT `users`.* FROM `users`
# WHERE (`users`.`id` = 1 AND `users`.`account` = 'a' OR `users`.`email` = 'b')
Development
After checking out the repo, run bin/setup
to install dependencies. Then, run rake test
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and tags, and push the .gem
file to rubygems.org.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/khiav223577/rails_or. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.
License
The gem is available as open source under the terms of the MIT License.
*Note that all licence references and agreements mentioned in the rails_or README section above
are relevant to that project's source code only.