Need data from rails join table, has_many :through

旧巷老猫 提交于 2019-11-26 22:54:52

问题


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.


回答1:


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




回答2:


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



回答3:


You might be able to do something like:

<% things.follows.each do |follow| %>
  <%= follow.relation %>
  <%= follow.user %>
<% end %>


来源:https://stackoverflow.com/questions/8874702/need-data-from-rails-join-table-has-many-through

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!