nil:NilClass 的未定义方法 '[]' ):



可能重复:
NoMethodError(nil:NilClass的未定义方法`[]';(

我是rails 3的新手,我正在尝试将一些东西呈现为HTML表单:

<td class="kanban-task-handler">by: <%=h (!@tasks[activity['taskid']]['assignee'].nil? ? @tasks[activity['taskid']]['assignee'] : '') %></td>

但我得到了这个错误:

undefined method `[]' for nil:NilClass):

但我正在检查这个变量,并声明如果它为零-->,则不打印任何内容。。。那为什么不起作用呢?

我不确定你想在这里做什么,但@tasks在这里似乎为零。你可以通过@tasks.nil查看一下吗?

但请记住,如果@tasks是一个数组,它不会给你零->true,则需要使用<Array>。空的

一种更安全的检查方法是:

@task.try(:attribute).try(:attribute2) etc

也许您应该以不同的方式对其进行建模。

为什么你首先要做@tasks[activity['taskid']]['assignee']???

您应该能够执行activity.assignee或`activity.task.assignee ``之类的操作

我猜您有一个"活动"、"任务"one_answers"受让人"模型。好吧,也许你没有代理人。

但是对于前2个,你可以这样做,并且遵循德米特定律,你不应该调用多个类的方法。

class Task < ActiveRecord::Base
  has_many :activities
  def assignee_name
    try(:assignee) || 'No assignee' # or ''
  end
end
class Activity < ActiveRecord::Base
  belongs_to :task
  delegate :assignee_name, to: :task
end

现在你可以用

<td class="kanban-task-handler">by: <%=h ativity.assignee_name %></td>

我会说试试:

td class="kanban-task-handler">by: <%=h (!@tasks[activity['taskid']]['assignee']) or ""%></td>

您也可以使用rescue关键字在同一行中处理异常,请尝试此

<td class="kanban-task-handler">by: <%=h (@tasks[activity['taskid']]['assignee'] rescue '') %></td>

相关内容

  • 没有找到相关文章

最新更新