我有一个带有嵌套任务的项目实例。如果我调试project.task
,我得到了我所期望的:
# debug result
--- !ruby/object:Task
attributes:
id: 1
name: XYZ
如果我想调试project.task.name,我得到了错误消息"nil:NilClass的未定义方法`name'"。
# this works
<% @projects.each do |project| %>
<%= project.name %><br/>
<%= debug project.task %>
<% end %>
# this does not work
<% @projects.each do |project| %>
<%= project.name %><br/>
<%= debug project.task.name %>
<% end %>
第一个有效,因为如果执行:
project.task
有一个项目,但没有任务,你得零。
然而,当你执行:
project.task.name
若task为nil,则会得到一个异常,因为它找不到name属性。但是,如果没有任务,可以使用rails-try方法:强制它返回nil
project.task.try(:name)