0

我有一个查询正在检查数据库中是否存在某个值,如果存在则返回一个数组

@canEditTask = Accessor.where("accessor_id = ? AND access_right = ?", current_user, true)

问题是这可以返回 nil @taskEdit = @canEditTask

undefined method但是由于 nil each' for nil:NilClass` ,我的 html 中的 each 方法仍然失败。

<% @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>
4

3 回答 3

3

您正在设置@canEditTasksindex 方法并尝试在 show 方法中使用它...如果您对此感到困惑,您可能应该回到基础并阅读/观看一些 Rails 教程(抱歉,如果我在这里遗漏了一些东西。 ..)。

于 2013-10-13T03:38:54.437 回答
2

当你@taskEdit = @canEditTasksshowaction中赋值时,@canEditTasks是nil,也@taskEdit就是nil。

动作一次运行一个,似乎您的代码希望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
于 2013-10-13T03:42:41.613 回答
0

我宁愿在活动记录之后使用 .to_a 。所以当一个 nil 数组被循环时没有错误;)避免了视图中的条件。

于 2013-10-13T05:10:38.510 回答