has_many通过关联的好名字

时间:2012-06-18 15:35:09

标签: ruby-on-rails model associations has-many-through

我已经读过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中不存在。

2 个答案:

答案 0 :(得分:3)

首先,一个想法真的有很多子想法吗?这听起来像是一种奇怪的关系,应该被标准化/重新考虑。

@gabrielhilal提出了一个很好的建议,但我建议稍微备份并重命名IdeaTop表,使其不那么透明。例如,如果Top是Topic的缩写,Idea似乎更像是主题上的“评论”,那么你的通过类可能是TopicComment或诸如此类的。

无论如何,我认为你应该开始重命名这些表以使它更有意义(或者向我们解释它们以便我们理解)然后继续@gabrielhilal建议只使用两个表的组合来命名连接表 - 这是常见做法,除非第三个表具有自己的特定含义(或具有自己的属性),例如Product + Sale = Invoice(其中invoice是连接表)

答案 1 :(得分:1)

我们需要了解IdeaTop的含义,以及它们之间的关系(为什么它是多对多的),以便为您提供一个适当的名称。
但是,如果您找不到具有此课程含义的名称,则可以使用IdeaTopTopIdea等内容...