所以我找到了很多关于这些主题的帖子,但没有一个回答我(可能是非常新手)的问题。这个月我是 Rails 的新手,但我已经在 OOL 中编程了一段时间。我认为我的问题可能涉及有关 Ruby on Rails 的多个主题。我不介意阅读多个博客或教程来平息这一切。
我有 4 个位置模型。每个都有一个“名称”属性。
- 国家(has_many :states)
- 州(belongs_to :country has_many :counties has_many :cities, :through => :counties)
- 县 (belongs_to :state has_many :cities)
- 城市
我的最终目标是为城市、县、州创建一个自动填充文本框。用户将选择一个国家来缩小结果范围。例如,用户输入“SA”,自动完成文本框将显示:
- 堪萨斯
- 阿肯色州
- 加利福尼亚州圣克拉拉县
- 加利福尼亚州圣克拉拉县圣何塞
- 等等
所以我可以轻松地返回我想要显示的文本。每个模型都有类似的东西:
定义位置名称
// 此模型的显示名称。例如,我们希望县模型返回“加利福尼亚州圣克拉拉县”
“#{name},#{state.name}”
结尾
我试图研究的解决方案:
Active Record Query Interface用于在多个表中创建一个 select 语句。我的目标是在多个模型中进行搜索,并获得一个名称包含搜索文本的对象列表。
STI - 也许创建一个所有都可以继承的 Location 模型,但我在网上找不到任何包含具有不同属性的模型的基本教程。我是否“生成”一个模型,其中包含所有 5 个需要的所有字段,然后从自动生成的 .rb 文件中删除它们?我假设我将能够使用 Location.where("name like ? and country_id = ?", params[:search], params[:country_id]) 并获得适合搜索参数的所有位置的完整列表。
MTI - 我看了这个,因为我不喜欢数据库中的多余列,这些列大多是空白的。例如 :country_id 只会被州使用。所以它对于所有县市等都是空的。但是所有的教程似乎都暗示 STI 会是更好的方法。
多态关联——我几个小时前才开始研究这个。我发现了一些关于 ":polymorphic => true" 的内容,并且我阅读了另一篇关于子类特性的文章。
根据 Ruby,我花了好几天的时间研究这样做的“正确”方式。我真的很想学习并整合所有 ruby 所提供的东西。感谢您的任何想法!