[Feature request] [ActiveRecord] Automatically create scopes for models boolean attributes

1,405 views
Skip to first unread message

Léo Santos

unread,
Jan 4, 2018, 7:23:09 AM1/4/18
to Ruby on Rails: Core
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

Kasper Timm Hansen

unread,
Jan 4, 2018, 7:54:05 AM1/4/18
to rubyonra...@googlegroups.com
I don’t think we’d like to autogenerate scopes for your models based on the column type, no.


You might want to look into using an enum backed by an integer ”status” column instead of the boolean column.

That generates a scope as well as making it really easy to add another state, should you need ever need to do so.

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-co...@googlegroups.com.
To post to this group, send email to rubyonra...@googlegroups.com.
Visit this group at https://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.

--
Kasper

radhames brito

unread,
Jan 4, 2018, 9:50:03 AM1/4/18
to rubyonra...@googlegroups.com
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.



To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-core+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-core@googlegroups.com.

--
Kasper

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-core+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-core@googlegroups.com.

Kevin Deisz

unread,
Jan 4, 2018, 10:14:18 AM1/4/18
to rubyonra...@googlegroups.com
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.
Kevin D. Deisz

Geoff Harcourt

unread,
Jan 4, 2018, 10:31:50 AM1/4/18
to rubyonra...@googlegroups.com
Hi Leo,

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.


-Geoff

Léo Santos

unread,
Jan 4, 2018, 1:17:05 PM1/4/18
to Ruby on Rails: Core
That's great guys! Will definitely try to take a deeper look into it and maybe build this as a gem. Thanks for the feedback
Reply all
Reply to author
Forward
0 new messages