рельсы 3.1: как сделать запрос activerecord через серию из 3 таблиц, соединенных has_one? - PullRequest
1 голос
/ 13 марта 2012

Пользователь has_one UserProfile, который имеет Community_one.

Учитывая идентификатор сообщества, я хочу получить список писем из таблицы Users.

Как получить список всех User.email, где community_id= 5?

Лучшее, что я могу найти (что работает):

User.select(:email).joins(:user_profile).merge(UserProfile.for_community(5))

Но, кажется, грубой силой ... разве нет способа сделать что-то более простое вСтроки этого ниже?

User.user_profile.community(5)

Ответы [ 2 ]

1 голос
/ 13 марта 2012

Не думаю, что вы знаете, что делает ваш код ...

Если сообщество UserProfile has_one, то таблица сообществ должна иметь столбец с именем user_id. Это означает, что с любым данным идентификатором сообщества связан только один пользователь.

Для решения вашего вопроса, как указано, вы можете делегировать метод user в user_profile.

class Community < ActiveRecord::Base
  belongs_to :user_profile
  delegate :user, to: :user_profile
end

Тогда вы могли бы сделать Community.find(community_id).user.email

Надеюсь, это поможет.

0 голосов
/ 13 марта 2012

Я думаю, что движение в другом направлении может выполнить то, что вы ищете:

Community.find("5").user_profile.user.emails
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...