2011-05-03 47 views
12

從Rails 2到Rails 3我從來沒有努力去理解某些東西(邊編輯)。範圍與連接在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) 

目前的錯誤我剛開始g是「未定義的方法`includes_values'爲:user_answers:符號」

有一個問題ID和一個用戶ID。每個答案都有question_id和user_id。

我需要用戶的答案通過ID適當鏈接的問題。你能告訴我我的模型在哪裏嗎?

謝謝。

回答

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 

合併作用域時,可以像合併類的方法一樣調用合併的作用域。

在我鏈接的文章,範圍:publishedPostUser合併範圍:published

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

謝謝,@McStretch 。我讀過那篇文章......但我會重讀它,看看它是否會有所幫助。 – Jay 2011-05-03 18:55:04

+0

謝謝,@McStretch。爲什麼「user_answers」不是範圍?我認爲使用「範圍」使其成爲一個範圍。你有沒有在答案模型中看到它? – Jay 2011-05-03 19:01:07

+0

@Jay - 不,我很抱歉,我錯過了。我會更新我的答案以反映我的新理解。 – McStretch 2011-05-03 19:02:38

-1
joins(:questions).joins(:user_answers)