1

可能重复:
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):

但我正在检查这个变量并说明它是否为 nil--> 然后什么也不打印出来……那为什么这不起作用呢?

4

4 回答 4

2

我很注意你想在这里做什么?,但似乎@tasks 在这里是零。你可以用@tasks.nil 检查它吗?

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

更安全的检查方法是

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

高温高压

于 2012-12-23T18:01:46.917 回答
1

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

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

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

我猜你有一个活动、任务和受让人模型。好的,也许您没有受让人。

但是对于前两个你可以做这样的事情,并且遵循得墨忒耳法则你不应该调用多个类的方法。

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>
于 2012-12-23T18:16:33.160 回答
0

我会说尝试:

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

于 2012-12-23T18:09:45.043 回答
0

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

<td class="kanban-task-handler">by: <%=h (@tasks[activity['taskid']]['assignee'] rescue '') %></td>
于 2012-12-23T18:21:55.023 回答