【问题标题】:How to model Rails associations for this schema如何为此模式建模 Rails 关联
【发布时间】:2012-06-28 22:17:00
【问题描述】:

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

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

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

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 之后,看起来多态关联可能更合适?)

【问题讨论】:

    标签: ruby-on-rails model associations


    【解决方案1】:

    这在一定程度上取决于您希望位置和类别之间的关系如何发挥作用;但是,如果您说 Location 必须属于子类别 类别,则似乎您的意思是 Location 必须仅属于子类别(具有类别)。所以我认为你的关联是正确的,除了 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}
    

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

        location.category.parent_category
    

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

    【讨论】:

    • 我还不能在代码中检查这个,但你的逻辑是有道理的。一旦我终于能够坐下来让我的环境运行起来,我可能还有一些问题......
    猜你喜欢
    • 2014-07-22
    • 2021-12-24
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多