如何为此架构建模Rails关联

时间:2012-06-28 22:17:01

标签: ruby-on-rails model associations

我正在尝试设置三个模型:位置/场地,类别和社区。

位置必须具有父类别和子类别,而其邻居是可选的。在类别模型中,有顶级类别或子类别。

鉴于上述情况,这是定义模型关联的正确方法吗?

class Location < ActiveRecord::Base
  attr_accessible # location-specific columns

  belongs_to :category
  belongs_to :parent_category, :class_name => "Category"
  belongs_to :neighborhood
end

class Category < ActiveRecord::Base
  has_many :locations
  has_many :subcategories, :class_name => "Category", :foreign_key => "parent_category_id"
  belongs_to :parent_category, :class_name => "Category"
end

class Neighborhood < ActiveRecord::Base
  has_many :locations
end

(实际上,在阅读了更多相应的Rails Guide之后,看起来多态关联可能更合适了吗?)

1 个答案:

答案 0 :(得分:0)

这在某种程度上取决于您希望您的地点和类别的关系如何发挥作用;但是,如果您说某个位置必须属于子类别类别,则您的意思是“位置”必须只属于子类别(具有类别)。所以我认为你的关联是正确的,除了Location上的“parent_category”是多余的。

例如,假设我有以下内容:

    music = Category.create {title: 'Music'}
    rock = Category.create {title: 'Rock', parent_category_id: music.id} 
    location = Location.create {title: 'The Fillmore', category_id: rock.id}

现在我有一个类别为“Rock”的位置,我可以像这样找出它的父类别(“音乐”):

    location.category.parent_category

鉴于你所概述的内容,我认为不需要任何多态关联。