尝试引用另一个表中的列时出现NoMethodError-RubyonRails



我有两个表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实例的引用,而categoryCategory实例,则应设置与以下项的关联:

category.head = head

相关内容

最新更新