0

我有两张表 Head 和 Category

在head.rb中

has_many :categories
attr_accessible :name_subcategory, :quote, :statement

在类别.rb

belongs_to :heads
attr_accessible :image_url, :string, :title, :show_on_home_page, :show_on_category_page, :show_in_footer, :float_subcategory, :name_subcategory

在我的视图文件中

<% @category.each do |category| %>
<%= category.heads.name_subcategory %>
<% end %>

在运行时我收到以下错误:

nil:NilClass 的未定义方法“name_subcategory”

我对rails很陌生,所以我认为这与没有在表之间建立正确的关系有关,但我对确切的问题感到很困惑。我试图研究这个错误,但它似乎非常广泛,可能是由各种各样的问题引起的,而且我无法准确指出我哪里出错了。

我希望这里有人可以提供帮助!

编辑 我想要实现的目标:每个头包含许多类别,我正在尝试打印出与特定类别关联的头(我知道命名很奇怪,这是我刚刚加入的团队项目)

4

2 回答 2

0

您收到此错误的原因是Category#head至少有一条Category记录返回nil

修复此错误的方法取决于您希望从该关联中获得什么。如果您希望每条Category记录都有Head关联,您可以使用validations. 您还应该正确命名关联,belongs_to关联名称应该是单数。此处给出示例:

class Category < ActiveRecord::Base
  belongs_to :head
  validates_presence_of :head
end

另一方面,您可能在设置关联时出错。给定head变量包含对Head实例的引用并且categoryCategory实例,您应该设置关联:

category.head = head
于 2013-07-11T11:43:28.523 回答
0

理想情况下,关系应该是

belongs_to :head   #note: head is singlular

正如 Marek Lipka 所说,其中一个类别可能有nil头部。所以你可以做

<%= category.heads.name_subcategory if category.heads %>

或者

<%= category.heads.try :name_subcategory %>

head如果更改关系,请记住将方法调用更改为

于 2013-07-11T11:50:30.197 回答