我已经读过rails 3中的多对多关系,并且看到HABTM已被“弃用”,因为大多数时候应该使用has_many :through
。
我看到很多例子,其中Join Model有一个明确的名称,例如Magazine,Suscriber = Subscriptions。
但在我的情况下,我找不到一个好名字:/是否有任何我应该注意的约定? Top包含1个或* Ideas,一个Idea可以在1或* Tops中。最后这是最好的方法吗?
这是我的代码:
class Top < ActiveRecord::Base
has_many :???
has_many :ideas, :through => :???
end
class Idea < ActiveRecord::Base
has_many :???
has_many :ideas, :through => :???
end
class ??? < ActiveRecord::Base
belongs_to :top
belongs_to :idea
end
另外通过使用has_many,我不需要手动创建连接表吗?
感谢您的帮助:)
编辑:
顶部就像一个排名。因此,顶部是按其投票排序的想法的表示。理念是一个想法(一般而言)。例如,可以作为轨道上红宝石的最佳实践的顶部,并且“使用has_many而不是HABTM”的想法。
所以Top包含1或* Ideas,而Idea可以属于1或* tops。对于想法,它更像是belongs_to_many但它在ror中不存在。
答案 0 :(得分:3)
首先,一个想法真的有很多子想法吗?这听起来像是一种奇怪的关系,应该被标准化/重新考虑。
@gabrielhilal提出了一个很好的建议,但我建议稍微备份并重命名Idea
和Top
表,使其不那么透明。例如,如果Top是Topic的缩写,Idea
似乎更像是主题上的“评论”,那么你的通过类可能是TopicComment或诸如此类的。
无论如何,我认为你应该开始重命名这些表以使它更有意义(或者向我们解释它们以便我们理解)然后继续@gabrielhilal建议只使用两个表的组合来命名连接表 - 这是常见做法,除非第三个表具有自己的特定含义(或具有自己的属性),例如Product + Sale = Invoice(其中invoice是连接表)
答案 1 :(得分:1)
我们需要了解Idea
和Top
的含义,以及它们之间的关系(为什么它是多对多的),以便为您提供一个适当的名称。
但是,如果您找不到具有此课程含义的名称,则可以使用IdeaTop
或TopIdea
等内容...