Ответ 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
}