单表继承(STI)..多表继承(MTI)..多态组合



所以我发现了很多关于这些主题的帖子,但没有一个回答我(可能是非常新手)的问题。这个月我是Rails的新手,但我已经用OOL编程一段时间了。我想我的问题可能涉及Ruby on Rails的多个主题。我不介意阅读多个博客或教程来解决这一切。

我有4个定位模型。每个都有一个";名称";属性

  1. 国家/地区(has_many:states)
  2. 州(belongs_to:country has_many:countrieshas_many:cities,:through=>:countries)
  3. 县(belongs_to:州has_many:市)
  4. 城市

我的最终目标是为城市、县、州创建一个自动完成的文本框。用户将选择一个国家/地区来缩小结果范围。例如,用户将键入";SA";自动完成文本框将显示:

  1. 堪萨斯州
  2. 阿肯色州
  3. 加利福尼亚州圣克拉拉县
  4. 加利福尼亚州圣克拉拉县圣何塞
  5. 等等

这样我就可以很容易地返回我想要显示的文本。每个型号都有类似的东西:

def location_name

//此模型的显示名称。例如,我们希望郡模型返回";加利福尼亚州圣克拉拉县;

"{name}、#{state.name}";

结束

我试图研究的解决方案:

  1. 活动记录查询接口在多个表中生成一个select语句。我的目标是在多个模型中搜索,得到一个包含搜索文本的名称的对象列表。

  2. STI-也许可以创建一个所有人都可以继承的Location模型,但我在网上找不到任何包含每个模型不同属性的基本教程。我";生成";一个包含所有5个字段的模型,然后从自动生成的.rb文件中删除它们?我想我将能够使用Location.where("name like?and country_id=?",params[:search],params]:country_id]),并获得符合搜索参数的所有位置的完整列表。

  3. MTI-我之所以研究这个问题,是因为我不太喜欢DB中大部分为空的多余列。例如:country_id只能由各州使用。因此,它对所有的县和市等来说都是无效的。但所有的教程似乎都暗示STI将是更好的方法。

  4. 多态关联-我几个小时前才开始研究这个问题。我发现了一些关于":多态性=>真";我读了另一篇关于子类特性的文章。

我花了好几天时间研究";右";鲁比说这是怎么回事。我真的很想学习并融入ruby所能提供的一切。谢谢你的想法!

也许您也可以观看此视频以进行进一步的开发。

http://railscasts.com/episodes/88-dynamic-select-menus

我想你的案子一对多应该没问题。。就像这个国家有很多州,相应的州有很多城市。

如果我错了,请纠正我@@