从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)
我得到的当前错误是"未定义的方法'包括值'为:user_answers:Symbol"
有一个Question id和一个User id。每个答案都有question_id和user_id。
我需要通过id适当链接用户的答案的问题。你能告诉我我的模型哪里错了吗?
谢谢。
&
操作符(我认为最近已弃用)是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
合并作用域时,像调用类方法一样调用合并的作用域。
在我链接的文章中,Post
上的:published
作用域与User
上的:published
作用域合并:
scope :published, lambda {
joins(:posts).group("users.id") & Post.published
}
Rails 4
Question.joins(Answer.user_answers)
[http://guides.rubyonrails.org/active_record_querying.html#joining-tables]
joins(:questions).joins(:user_answers)