Rails:第二级关联/未定义方法错误

时间:2017-05-14 02:42:13

标签: ruby-on-rails ruby activerecord model-associations

我有这些方法:

class Item < ApplicationRecord
  has_many :fabrics
end

class Fabric < ApplicationRecord
  belongs_to :item
  has_many :inventories
end

class Inventory < ApplicationRecord
  belongs_to :fabric
end

控制器:

class InventoryController < ApplicationController

def index
  @inventory = Inventory.all
end

并查看:

<% @inventory.each do |f| %>
    <tr>
        <td><%= f.fabric.item %></td>
    </tr>
<% end %>

我收到此错误:

ActionView::Template::Error (undefined method `item' for nil:NilClass):

有人可以解释我收到此错误的原因吗?是因为范围?我读过Active Record Associations Guide(http://guides.rubyonrails.org/association_basics.html#belongs-to-association-reference)。在'4.1.3.2 includes'下有一个类似于我的模型关联的例子,它说这应该没问题?

1 个答案:

答案 0 :(得分:0)

此错误表示某些库存没有相关结构等inventory.fabric == nil。您需要在视图代码中管理此案例:

<% @inventory.each do |f| %>
    <tr>
        <td><%= f.fabric ? f.fabric.item : "Without item" %></td>
    </tr>
<% end %>