具有连接的范围以在Rails 3中获取数据

时间:2011-05-03 18:41:26

标签: ruby-on-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)

我得到的当前错误是“未定义的方法`includes_values':user_answers:Symbol”

有一个问题ID和一个用户ID。每个答案都有question_id和user_id。

我需要通过ID正确链接用户答案的​​问题。你能告诉我我的模特哪里错了吗?

谢谢。

3 个答案:

答案 0 :(得分:15)

&运算符(我认为最近已弃用)是merge的别名,它允许您实际合并范围。 :user_answers不是范围,因此您无法使用此方法。

正如Dinatih指出的那样,你可以多次调用连接。在这种情况下,为每个连接创建不同的范围对你来说不会太多,所以他的方法适合你的情况。

有关范围的更多信息: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上的范围Post:published上的范围User合并:

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

答案 1 :(得分:1)

Rails 4

Question.joins(Answer.user_answers)

[http://guides.rubyonrails.org/active_record_querying.html#joining-tables]

答案 2 :(得分:-1)

joins(:questions).joins(:user_answers)