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