嵌套实例上未定义的方法



我有一个带有嵌套任务的项目实例。如果我调试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)

最新更新