Нужны данные из таблицы соединений rails, has_many: through - PullRequest
13 голосов
/ 16 января 2012

У меня есть 3 таблицы - пользователи, вещи и следующие.Пользователи могут следить за вещами через следующую таблицу, связывая user_id с things_id.Это будет означать:

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

Таким образом, я могу без проблем извлекать thing.users.Моя проблема заключается в том, что если в следующей таблице у меня есть столбец с именем «отношение», поэтому я могу установить последователя в качестве «администратора», я хочу иметь доступ к этому отношению.Таким образом, в цикле я могу сделать что-то вроде:

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

Есть ли способ включить отношение в исходный пользовательский объект?Я пробовал :select => "follows.relation", но, похоже, он не присоединяется к атрибуту.

Ответы [ 3 ]

22 голосов
/ 16 января 2012

Для этого вам нужно использовать немного SQL в has_many. Надеюсь, что-то вроде этого должно работать. has_many :users, :through => :follows, :select => 'users.*, follows.is_admin as is_follow_admin'

Тогда в цикле у вас должен быть доступ к user.is_follow_admin

8 голосов
/ 03 ноября 2014

Для людей, использующих рельсы 4, использование: order,: select и т. Д. Устарело.Теперь вам нужно указать следующее:

has_many :users, -> { select 'users.*, follows.is_admin as is_follow_admin' }, :through => :follows
0 голосов
/ 16 января 2012

Вы можете сделать что-то вроде:

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