2013-07-11 132 views
0

我有两个表头和类别NoMethodError - Ruby on Rails的

在head.rb

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

在category.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 %> 

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

undefined method `name_subcategory' for nil:NilClass

我很新的轨道,所以我觉得这个事做与不做的表之间的关系,正确,但我敢难倒的确切问题。我试图研究这个错误,但它似乎非常宽泛,可能是由各种各样的问题引起的,我无法准确指出我要出错的地方。

我希望这里有人能帮忙!

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

回答

0

理想的关系应该是

belongs_to :head #note: head is singlular 

由于马立克Lipka的说,该类别中的一个可以有一个nil头。所以,你可以做

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

OR

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

记住要调用的方法更改为head,如果你改变的关系

+0

我将关系改为单数版本。非常感谢这个答案,它没有给出我想要的输出,但至少我对发生了什么问题有了更好的了解。 – twirlingtornadoes

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 
+0

好吧,但是我想要做的就是打印出来的与特定类别相关联的头部。我不确定无记录来自哪里,因为每个类别都与一个头相关联。 – twirlingtornadoes

+0

@twirlingtornadoes如果你想快速调试您的问题,您可以键入: '<%= @ categories.map {|类别| [category.id,category.head]}%>' 您的视图中的某处并运行此代码。 此外,您的associatian命名是错误的,请查看我的答案,因为我编辑它以反映这一事实。 –

+0

@Marek_Lipka这可能是一个新手的问​​题,但并validates_associated:头确保类是引用一个头?或类似的东西? – twirlingtornadoes

相关问题