从Rails中的子对象访问父对象属性
我有一个名为Category的模型,如下所示:
class Category "parent_id" end
我有一个视图,显示所有类别及其一些属性。 我可以访问category.parent_id
,但我希望能够做类似category.parent_name
事情。
我可以看到自己创建一个模型方法来获取所有类别并使用每个类别的对应父名称填充集合,但我想知道是否有任何方式可以轻松地执行此操作。
编辑:我修改了模型,让它像这样:
class Category 'Category', :foreign_key => 'parent_id' belongs_to :parent, :class_name => 'Category', :foreign_key => 'parent_id' end
创建表类别的迁移如下所示:
class CreateCategories < ActiveRecord::Migration def change create_table :categories do |t| t.string :name t.text :description t.integer :parent_id t.timestamps end end end
但是,当我将类别对象传递给视图时,我无法通过执行category.parent.name
来访问其父属性 – 对该对象进行inspect
可以让我:
如果我检查category.parent
我得到这个:
#
但是,如果我尝试执行category.parent.name
则会收到以下错误:
undefined method `name' for nil:NilClass
EDIT2:我试图在上面提到的对象之前访问一个nil的父级。 这样做:
category.parent.try(:name)
正如Michael Irwin所建议的那样,其中一个答案解决了它。
自我引用协会第一次很难……
class Category < ActiveRecord::Base has_many :children, :class_name => 'Category', :foreign_key => 'parent_id' belongs_to :parent, :class_name => 'Category', :foreign_key => 'parent_id' end
然后你可以调用category.children
和category.parent
,并访问asscoiated oobjects的所有属性,…
我不确定我是否完全理解你的问题,但category.parent.name
应该有效。 如果某个类别没有父类,请执行category.parent.try(:name)
以避免获取NoMethodError
。