我有两个表Head和Category
头部.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还很陌生,所以我认为这与没有在表之间建立正确的关系有关,但我对确切的问题很困惑。我试着研究这个错误,但它似乎非常广泛,可能是由一系列问题引起的,我很难准确地指出我的错误所在。
我希望这里有人能帮忙!
编辑我试图实现的是:每个标题都包含许多类别,我试图打印出与特定类别相关的标题(我知道命名很奇怪,这是我刚刚加入的团队项目)
理想情况下,关系应该是
belongs_to :head #note: head is singlular
正如Marek Lipka所说,其中一个类别可能有一个nil
头。所以你可以做
<%= category.heads.name_subcategory if category.heads %>
或
<%= category.heads.try :name_subcategory %>
如果您更改关系
head
出现此错误的原因是至少有一条Category
记录的Category#head
返回nil
。
修复此错误的方法取决于您希望从此关联中得到什么。如果希望每个Category
记录都关联其Head
,则可以使用validations
。您还应该正确命名关联,belongs_to
关联名称应该是单数。示例如下:
class Category < ActiveRecord::Base
belongs_to :head
validates_presence_of :head
end
另一方面,您可能在设置关联时出错。给定head
变量包含对Head
实例的引用,而category
是Category
实例,则应设置与以下项的关联:
category.head = head