代码之家  ›  专栏  ›  技术社区  ›  Kombo

创建新实例时“nil:NilClass的未定义方法'name'”

  •  0
  • Kombo  · 技术社区  · 14 年前

    我在rails中遇到了一个问题,我在两个模型之间有一个基本的多对多关系(顺序和状态)。这些模型如下所示:

    class Order < ActiveRecord::Base
      has_many :products, :through => :lines
      has_and_belongs_to_many :statuses
    
      default_scope order("#{table_name}.created_at desc")
    end
    

    class Status < ActiveRecord::Base
      has_and_belongs_to_many :orders
    
    end
    

    在订单的索引视图中,我显示订单的最新状态,因此Order.statuses.last.name,但是,当我创建新订单时,收到一个错误。此错误适用于未定义的方法名,因为新订单在首次创建时没有任何关系。

    我的问题是,在保存新订单之前,是否有方法初始化两个模型之间的关系?我希望我的订单至少始终具有“状态”集合中的第一个状态,但不希望在保存之前使用手动检查它。

    良好措施的错误是:

    undefined method `name' for nil:NilClass
    

    在我看来,这一行:

    <td><%= order.statuses.last.name %></td>
    

    谢谢大家。

    2 回复  |  直到 9 年前
        1
  •  0
  •   Heikki    14 年前

    如果没有最后状态或最后状态没有名称,则应注意

    <td><%= order.statuses.last.try(:name) %></td>
    
        2
  •  1
  •   Mark Thomas    14 年前

    一个简单的解决方案:

    <td><%= order.statuses.last.name if order.statuses %></td>