I have 3 tables - users, things, and follows. Users can follow things through the follows table, associating a user_id
with a things_id
. This would mean:
class User
has_many :things, :through => :follows
end
class Thing
has_many :users, :through => :follows
end
class Follow
belongs_to :users
belongs_to :things
end
So I can retrieve thing.users with no problem. My issue is if in the follows table, I have a column named "relation", so I can set a follower as an "admin", I want to have access to that relation. So in a loop I can do something like:
<% things.users.each do |user| %>
<%= user.relation %>
<% end %>
Is there a way to include relation into the original user object? I have tried :select => "follows.relation"
, but it doesn't seem to join the attribute.
To do this you need to use a bit of SQL in the has_many. Something like this should hopefully work.
has_many :users, :through => :follows, :select => 'users.*, follows.is_admin as is_follow_admin'
Then in the loop you should have access to
user.is_follow_admin
For people using rails 4, the usage of :order, :select, etc has been deprecated. Now you need to specify as follows:
has_many :users, -> { select 'users.*, follows.is_admin as is_follow_admin' }, :through => :follows
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With