我应该使用单表继承(STI)还是单类逻辑来处理关系?

时间:2013-12-14 18:46:39

标签: ruby-on-rails ruby-on-rails-4

我有一个名为Area的模型。区域可以是州,县,镇或建筑物。区域的所有对象,无论是州,县,镇还是建筑物,都具有相同的字段(名称,描述和注释)。

不同类型的区域之间没有不同的功能或行为。这些类型仅用于创建关系。

一个州拥有县,一个县拥有城镇等。这用于直观地表示,组织和过滤区域。因此,用户可以看到县的类型区域的显示视图,并查看属于该县的所有城镇的列表,还可以查看它所属的州。他们可以单击它所属的州,然后查看该州的所有县。他们也可以点击一个城镇,看看该镇的所有建筑物。

这是我的区域架构:

create_table "areas", force: true do |t|
  t.string   "name"
  t.text     "description"
  t.text     "notes"
  t.datetime "created_at"
  t.datetime "updated_at"
  t.string   "area_type"
  t.string   "type"
end

正如您所看到的,我已经在尝试使用STI和常规字符串(area_type)。我没有决定或想出哪一个在这种情况下是最好的,尽管从我的研究中我更倾向于使用area_type而不是STI,因为任何类型的数据模型之间没有区别。

这是我的Area.rb模型:

class Area < ActiveRecord::Base

  class << self
    def area_types
      types_array = [
        ['State'],
        ['County'],
        ['Town'],
        ['Building']
      ]
    end
  end
end

class State < Area
  has_many :counties
end

class County < Area
  has_many :towns
  belongs_to :state
end

class Town < Area
  has_many :buildings
  belongs_to :county
end

class Place < Area
  belongs_to :town
end

我是rails的新手并且正在努力做出正确的选择以正确构建这个,对此有任何建议或帮助吗?请尽可能具体,因为我对铁轨并不是非常了解。我觉得我很接近,但只是不知道如何将所有剩余的部分包装在一起。谢谢!

0 个答案:

没有答案