单表继承(STI)...多表继承(MTI)...多态关联

时间:2012-11-14 02:45:25

标签: ruby-on-rails-3

所以我在这些主题上发现了很多帖子,但没有人回答我(可能是非常新手)的问题。我本月对Rails是全新的,但我已经在OOL编程了一段时间。我认为我的问题可能涉及Ruby on Rails的多个主题。我不介意一起阅读多个博客或教程以实现和平。

我有4个位置模型。每个都有一个“名称”属性。

  1. 国家/地区(has_many:states)
  2. 州(belongs_to:country has_many:郡has_many:cities,:through =>:县)
  3. 县(belongs_to:state has_many:cities)
  4. 我的最终目标是为城市,县,州提供自动填充文本框。用户将选择一个国家来缩小结果范围。例如,用户将键入“SA”,自动填充文本框将显示:

    1. 堪萨斯
    2. 阿肯色州
    3. 加利福尼亚州圣克拉拉县
    4. 圣何塞,加利福尼亚州圣克拉拉县
    5. 所以我可以轻松返回我想要显示的文本。每个模型都有类似的东西:

        

      def location_name

           

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

           

      “#{name},#{state.name}”

           

      我试图研究的解决方案:

      1. Active Record Query Interface 可在多个表中生成一个select语句。我的目标是搜索多个模型并获得一个包含搜索文本名称的对象列表。

      2. STI - 也许创建一个可以继承的位置模型,但我找不到任何在线的基本教程,其中包含每个模型具有不同属性的模型。我是否“生成”一个模型,其中包含所有5个需要的字段,然后从自动生成的.rb文件中删除它们?我假设我将能够使用Location.where(“name like?and country_id =?”,params [:search],params [:country_id])并获得适合搜索参数的所有位置的完整列表。< / p>

      3. MTI - 我看了这个,因为我不是DB中过多列的忠实粉丝。例如:country_id仅供州使用。所以对于所有的县和城市等都是空的。但是所有的教程似乎都暗示STI会是更好的方式。

      4. 多态关联 - 我刚开始在几个小时前开始研究这个问题。我发现了一些关于“:polymorphic =&gt; true”的内容,我读了另一篇谈论子类特性的文章。

      5. 根据Ruby,我花了很多天时间研究这种做法的“正确”方法。我真的很想学习和整合红宝石所提供的一切。谢谢你的想法!

1 个答案:

答案 0 :(得分:0)

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

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

你的情况一对多应该没问题我猜... 像这个国家有很多州,而且有很多城市。

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