在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)

我得到的当前错误是"未定义的方法'包括值'为: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)

相关内容

  • 没有找到相关文章

最新更新