2008-11-15 82 views
0

我不知道如何搜索這個答案,所以我會繼續問它。如何在Rails視圖中訪問不同的對象集合?

在我的rails項目中,我有一個用戶模型和一個foo模型。用戶可以爲其分配一個或多個foo模型。我已經通過添加

has_many :foo, :through => :user_foo 

在我的用戶模型中。

現在,在我看來,我想顯示所有foos的列表。不只是那些被選中的人(我將製作這些單選按鈕,但這是另一個問題)。當我嘗試這樣做(是的,我使用HAML):

- for foo in @foos 

我得到這個錯誤:

You have a nil object when you didn't expect it! 
You might have expected an instance of Array. 
The error occurred while evaluating nil.each 

我的假設是,這是造成的,因爲在@foos集合爲空。在我的用戶視圖中訪問此集合的正確方法是什麼?

**編輯**

我想我最初的問題是有點混亂。我試圖找出的第一個問題是如何從我的用戶視圖中訪問foos的集合。這種關係並不重要。我只想要一個系統中所有foos的列表。不只是分配給用戶的那些。

回答

3

我假設你在Foo類中有belongs_to :user

你的控制器代碼是什麼樣的?要顯示所有的foos,它應該是這樣的:

def index 
    @foos = Foo.all 
end 
+0

我沒有在我的FOO模型。現在我已經添加了它,我得到這個錯誤: 無法找到關聯:user_foo模型用戶 在我的foo模型中,它應該是belongs_to:user_foo然後在user_foo中它應該說belongs_to:foo?這似乎並不正確 – 2008-11-15 18:00:53

0

錯誤提示您foo對象爲空。

如果希望所有Foo的當前用戶對象連接,您使用

my_user = User.find(1) # finds user with id no. 1 
list_of_foos = my_user.foos # finds all foos associated with my_user 

應該工作

如果您正在尋找所有Foo的,不管他們的協會,你用什麼

list_of_foos = Foo.find(:all) 

這可能不符合當前流行的Rails語法:自從我積極地進行Rails開發之後,這已經有一段時間了,但是如果我理解了這個問題對,這應該對你有所幫助。祝你好運。

2

要訪問所有FOOS只需使用

@foos = Foo.all 

在你的控制器。

與您之前遇到的錯誤,可以通過檢查來防止無對象錯誤,如:

- if @foos.empty? 
    %p There are no Foos 
- else 
    ... 

此外,遍歷集合的最好方法是使用#each方法,而不是一個for循環。例如:

- @foos.each do |foo| 
    %p= foo.name 

所以成品的例子是:

- if @foos.empty? 
    %p There are no Foos 
- else 
    - @foos.each do |foo| 
    %p= foo.name 
相關問題