2011-03-06 101 views
6

對於主動記錄和查找數據,我不認爲有什麼區別。查找與關係之間的區別

這裏是我的模型

class User < ActiveRecord::Base 
    has_many :shows 
end 

class Show < ActiveRecord::Base 
    belongs_to :user 
end 

當我使用的鐵軌控制檯我可以做以下和它的作品。

u = User.find(1) 
u.shows 

它爲我提供了該用戶的所有節目。

然而,當我做

u = User.where("username = ?", "percent20") 
u.shows # this is doesn't work gives me a now instance error 

我得到同樣的用戶和相關信息,但沒有關係。我能看到的唯一問題可能是我做錯了什麼,因爲在哪裏和找到哪裏有區別。

任何幫助表示讚賞。

回答

10

問題不是關係。

u = User.find(1) 

返回一個用戶

#return a Set of users. In your case its only one user. 
u = User.where("username = ?", "percent20") 

結果類型是ActiveRecord的::關係 - > [用戶,用戶,用戶]

使用例如率先拿到了第一用戶

#returns the first user 
u = User.where("username = ?", "percent20").first 

u.class.name => 「用戶」

+1

我覺得看完這個非常愚蠢的。我知道這個,grrrrrrr。由於答案的冗長,我將此標記爲答案。感謝所有回覆。 – percent20 2011-03-06 21:21:29

5

User.find(1)正在使用其ID檢索特定記錄,而User.where(「username =?」,「percent20」)正在檢索符合條件的記錄集。

嘗試:

u = User.where("username = ?", "percent20").first 
u.shows 
3

其中是返回對象的陣列的方法。所以,在你的情況下試試

u.each { |user| user.shows }