从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正确链接用户答案的问题。你能告诉我我的模特哪里错了吗?
谢谢。
答案 0 :(得分:15)
&
运算符(我认为最近已弃用)是merge
的别名,它允许您实际合并范围。 :user_answers
不是范围,因此您无法使用此方法。
正如Dinatih指出的那样,你可以多次调用连接。在这种情况下,为每个连接创建不同的范围对你来说不会太多,所以他的方法适合你的情况。
<强>更新强>
对不起我的误会。 :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)