我不确定如何搜索这个答案,所以我会继续问问。
在我的rails项目中,我有一个User模型和一个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的列表。不只是分配给用户的那些。
答案 0 :(得分:3)
我假设您的Foo课程中有belongs_to :user
?
您的控制器代码是什么样的?要显示所有的foos,它应该有这样的东西:
def index
@foos = Foo.all
end
答案 1 :(得分:2)
要访问所有Foos,只需使用
@foos = Foo.all
在您的控制器中。
您之前遇到的错误,可以通过以下检查阻止nil对象错误:
- 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
答案 2 :(得分: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开发以来已经有一段时间了,但如果我理解正确的问题,这应该对你有帮助。祝好运。