【发布时间】:2018-03-28 10:16:17
【问题描述】:
假设我有一个模型项目,它有一个 Foo 和多个 Bars。
Foo 和 Bar 可以作为搜索 Item 时的参数,因此可以像这样搜索 Item:
www.example.com/search?foo=foovalue&bar[]=barvalue1&bar[]=barvalue2
我需要生成一个能够保存这些搜索参数的Query 对象。我需要以下关系:
- 查询需要访问一个 Foo 和多个 Bars。
- 一个 Foo 可以被许多不同的查询访问。
- 许多不同的查询可以访问一个栏。
- Bar 和 Foo 都不需要了解 Query。
我目前的这种关系是这样建立的:
class Query < ActiveRecord::Base
belongs_to :foo
has_and_belongs_to_many :bars
...
end
Query 还有一个方法可以返回这样的哈希值:{ foo: 'foovalue', bars: [ 'barvalue1', 'barvalue2' },它让我可以轻松地将这些值传递给 url 帮助程序并生成搜索查询。
这一切都很好。
我的问题是这是否是建立这种关系的最佳方式。我还没有看到任何其他单向 HABTM 关系的例子,所以我想我可能在这里做错了什么。
这是可接受的 HABTM 用法吗?
【问题讨论】:
-
了解您为什么要这样做会很有用:当您偏离常规路径时,可能有更合适的方法来解决问题。
-
绝对 - 我想知道是否有更合适的方法。至于为什么——我需要建立一个与其他模型相关的“已保存的搜索查询”。您需要有关用例的更多具体信息吗?
-
看起来不错。只要不使用模型中的关系,它们就是可选的。如果您永远不会使用“bar.items”或“foo.items”或“foo.bars”,那么您可以将所有关系留在 Item 上。当然。
-
“您需要更多关于用例的具体信息吗?”是的
-
我已将答案更新为更具体。
标签: ruby-on-rails activerecord