Hi there!
I would like to introduce a feature that can expedite development, which by the way I think it’s one of the greatest advantages of using Ruby on Rails. So, looking to follow the Convention Over Configuration standard, lets say you have:
# a users table
create_table "users", force: true do |t|
t.boolean “active”, default: true
end
# a User model
class User < ActiveRecord::Base
end
The new feature would automatically add the scope to fetch active users like:
User.active
without having to explicitly define it on the model. It is similar to a feature that has already been implemented to boolean attributes that allow us to do things like:
>user = User.new(active: true)
>user.active**?**
#=> true
Do you think it's worthy merging it into Rails core?
Best regards,
Leonardo Santos
Hi Leo.
I think it makes more sense to make this an op-in thing like this
class User < ActiveRecord::Base
boolean_scope :active
end
And then you have the scope User.active, with the extra option of doing boolean_scope :active, negative: :inactive that would create the scope for the false case.
This of course would raise if there is not column matching the name, since any more work and is easier to declare the scope. Just my 2 cents.
IIRC, this was actually a thing in Rails 2 and it got taken out. I agree with you about the convention over configuration idea, but when you only need the one line of code to get it back, and it relieves a maintenance burden and makes things faster, I’d have to side with it not being in core.
That being said, this is one of those things that would be great for a gem to provide automatically (basically on initialize search through for every boolean column and set up scopes). Sounds like a good project if you’ve got time to take it on.
A suggestion if you wanted to build this feature as a gem: the Pacecar gem used to add these scopes automatically. It’s no longer maintained, but you could dig up some of the code to just get the automatic scopes for booleans.