嵌套实例上的未定义方法

时间:2012-03-19 20:19:52

标签: ruby-on-rails ruby-on-rails-3

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

1 个答案:

答案 0 :(得分:1)

第一个有效,因为如果执行:

project.task

并且有一个项目,但没有任务,你没有。

但是,执行时:

project.task.name

如果task为nil,则会出现异常,因为它找不到name属性。但是,如果没有任务,则可以通过使用rails try方法强制它返回nil:

project.task.try(:name)