2008-11-15 46 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 
相关问题