Подтвердить что ты не робот

Область с соединениями для получения данных в Rails 3

Переход из Rails 2 в Rails 3 Я никогда не работал так много, чтобы что-то понять (редакционная статья).

В любом случае, в приложении Rails 3 у меня есть следующие модели...

Пользователь:

has_many :answers

Ответ:

belongs_to :user
belongs_to :question
scope :user_answers, where (:user_id => current_user.id)

Вопрос:

has_many :answers
scope :qs_w_user_ans, joins(:questions) & (:user_answers)

Текущая ошибка, которую я получаю, это "undefined метод` includes_values ​​" для: user_answers: Symbol

Существует идентификатор вопроса и идентификатор пользователя. Каждый ответ имеет question_id и user_id.

Мне нужны вопросы, когда пользователь отвечает соответствующим образом через идентификаторы. Можете ли вы показать мне, где мои модели ошибочны?

Спасибо.

4b9b3361

Ответ 1

Оператор & (который, как мне кажется, недавно устарел) является псевдонимом для merge, который позволяет существенно объединить области. :user_answers не является областью действия, поэтому вы не можете использовать этот метод.

Как отметил Динатих, вы можете вызывать соединения несколько раз. В этом случае создание разных областей для каждого соединения не будет покупать вас много, поэтому его метод подходит для вашего случая.

Дополнительная информация по областям: http://archives.edgerails.info/articles/what-s-new-in-edge-rails/2010/02/23/the-skinny-on-scopes-formerly-named-scope/index.html

Обновление

Извините за мое недоразумение. :user_answers - это область видимости, но в этом случае вы не называете ее правильной. Вы хотите следующее:

scope :qs_w_user_ans, joins(:questions) & Answer.user_answers

При слиянии областей вы вызываете объединенные области, такие как методы класса.

В статье, связанной мной, область :published on Post сливается с областью :published на User:

scope :published, lambda {
  joins(:posts).group("users.id") & Post.published
}

Ответ 3

joins(:questions).joins(:user_answers)