Доступ к значениям в has_many: через таблицу соединений
-
20-09-2019 - |
Вопрос
У меня есть пользователи, которые являются членами групп через таблицу объединения участников, и одним из атрибутов этой таблицы объединения является «администратор».Я пытаюсь проверить представление участников группы, просматривая каждого участника, чтобы узнать, являются ли они администраторами.
В представлении я попробовал следующее:
for user in @group.users
if user.administrator?
...DO STUFF
end
end
Я также попробовал это в контроллере:
@administrators = @group.memberships.find(:all, :conditions => ["administrator = 1"])
Но не повезло.Есть предположения?
ОБНОВЛЕНИЕ. Как показано ниже, поместите метод в модель пользователя:
def is_administrator_of(group_id)
Membership.find(:first, :conditions => ['user_id = ? AND group_id = ? AND administrator = ?', self[:id], group_id, true])
end
Решение
Хотя я думаю, что для этого вы могли бы настроить ассоциации, я думаю, что самый простой способ сделать это — добавить в вашу модель пользователя метод, который позволит вам проверять каждого пользователя (таким образом, он будет вписываться в предоставленный вами цикл).Я не знаю, получится ли это правильно, может потребоваться несколько быстрых изменений, но вы можете начать с чего-то вроде:
Модель пользователя
def is_administrator_of(group_id)
Membership.find(:first, :conditions => ['user_id = ? AND group_id = ?', self[:id], group_id]).administrator == 1
end
Другие советы
Я думаю, что это будет более чистый способ сделать это
class Group < ActiveRecord::Base
has_many :memberships
has_many :users, :through => :memberships
has_many :admins, :through => :memberships, :source => :user,
:conditions => ['memberships.administrator = ?', true]
end
Теперь у вас есть список group.admins.
for user in @group.admins
...DO STUFF
end