我有一个带嵌套任务的项目实例。如果我调试project.task
我得到了我的期望:
# debug result
--- !ruby/object:Task
attributes:
id: 1
name: XYZ
如果我想调试project.task.name,我收到错误消息“未定义的方法`名称'为nil:NilClass”。
# 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 %>
答案 0 :(得分:1)
第一个有效,因为如果执行:
project.task
并且有一个项目,但没有任务,你没有。
但是,执行时:
project.task.name
如果task为nil,则会出现异常,因为它找不到name属性。但是,如果没有任务,则可以通过使用rails try方法强制它返回nil:
project.task.try(:name)