零对象错误

时间:2010-02-11 15:47:00

标签: ruby-on-rails

这是输出:

 Parameters: {"action"=>"confirm", "id"=>"1", "controller"=>"sites"}
 User Columns (2.2ms)   SHOW FIELDS FROM `users`
 User Load (0.3ms)   SELECT * FROM `users` WHERE (`users`.`id` = 2) LIMIT 1
 School Load (0.3ms)   SELECT * FROM `schools` LIMIT 1
 Rendering template within layouts/application
 Rendering sites/confirm

ActionView::TemplateError (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.map) on line #4 of app/views/sites/confirm.erb:
 1: 
 2:  <%   
 3:    form_for(:site, :url => {:action => :confirm}) do 
 4:    select_tag(:id, options_from_collection_for_select(@confirm, 'id', 'confirm')) 
 5:    end
 6:   %>

即使我在控制器中执行了:@confirm = Request.find(:all),它仍然会返回错误。

站点控制器:

def confirm
x = current_user.contact.contactable
@confirm = Request.find(:all, :conditions => ["location_id = ?", x])
end

确认站点文件夹中的视图:

<%   
form_for(:site, :url => {:action => :confirm}) do 
select_tag(:id, options_from_collection_for_select(@confirm, 'id', 'confirm')) 
end
%>

知道为什么吗?第4行出错。我相信它认为@confirm不是一个数组,虽然应该是因为在控制器中我将表中的两个项传递给它。我使options_from_collection_for_select选项类似于rails指南中的选项。基本上,我想根据这些选项是否与当前用户的位置匹配来显示可供选择的选项列表。谢谢你的任何建议。

2 个答案:

答案 0 :(得分:1)

错误暗示控制器的@confirm方法中的confirm实例变量为零。你能添加一些日志来验证是否是这种情况吗?


修改:我刚刚注意到问题中发布的form_for块使用了:

<%= form_for ... %>

应该是:

<% form_for ... %>

答案 1 :(得分:1)

您的控制器中的'private'关键字后面的操作是什么?

我意识到这是旧线程的后期帖子。这里希望它可以帮助原始海报或其他任何有这个问题的人。