我有一个查询,检查数据库中是否存在某些值,如果存在则返回一个数组
@canEditTask = Accessor.where("accessor_id = ? AND access_right = ?", current_user, true)
问题是这可以返回零 @taskEdit = @canEditTask
但我的html中的每个方法仍然失败,因为nil {nil undefined method
nil:NilClass`
<% @taskEdit.each do |task| %>
<%= task.id %>
在这种情况下,防止nil破坏我的代码的最佳方法是什么?
编辑 控制器代码
def index
@canEditTasks = Accessor.where("accessor_id = ? AND access_right = ?", current_user, true)
end
def show
@taskEdit = @canEditTasks
rescue ActiveRecord::RecordNotFound
render :file => 'public/404.html'
end
查看代码
<div>
<% @taskEdit.each do |task| %>
<%= task.id %>
<% end %>
</div>
答案 0 :(得分:3)
您在索引方法中设置@canEditTasks
并尝试在show方法中使用它...如果您对此感到困惑,您可能应该回到基础并阅读/观看一些Rails教程(抱歉)如果我在这里遗漏了什么......)。
答案 1 :(得分:2)
在@taskEdit = @canEditTasks
操作中指定show
时,@canEditTasks
为零,这意味着@taskEdit
也为零。
一次运行一个操作,似乎您的代码期望index
先运行,然后show
将在此之后运行。这不是Rails默认的工作方式。如果您想运行一些在多个操作之间共享的代码,我建议使用before_filter
。
before_filter :set_can_edit_tasks
def index; end
def show
@taskEdit = @canEditTasks
rescue ActiveRecord::RecordNotFound
render :file => 'public/404.html'
end
private
def set_can_edit_tasks
@canEditTasks = Accessor.where("accessor_id = ? AND access_right = ?", current_user, true)
end
答案 2 :(得分:0)
我更喜欢在活动记录之后使用.to_a。因此,当nil数组循环时没有错误;)避免视图中的条件。