4

我已经阅读了 rails 3 中的多对多关系,并看到 HABTM 已被“弃用”,因为has_many :through大部分时间都应该使用它。

我看到了很多加入模型具有明确名称的示例,例如杂志、订阅者 = 订阅。

但就我而言,我找不到一个好名字:/有什么约定我应该注意的吗?顶部包含 1 或 * 个创意,一个创意可以在 1 或 * 个顶部。最后,这是最好的方法吗?

这是我的代码:

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,我不需要手动创建连接表吗?

谢谢你的帮助 :)

编辑:
顶部就像排名。所以顶部是按投票排序的想法的代表。一个想法是一个想法(一般来说)。例如,可以是 ruby​​ on rails 的最佳实践和“使用 has_many through 而不是 HABTM”的想法。
所以一个 Top 包含 1 个或 * 个 Ideas,一个 Idea 可以属于 1 个或 * 个 tops。对于想法来说,它更像是一个belongs_to_many,但它不存在于ror 中。

4

2 回答 2

3

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

@gabrielhilal 提出了一个很好的建议,但我建议稍微备份一下并将IdeaandTop表重命名为不那么不透明。例如,如果 Top 是 Topic 的缩写,Idea看起来更像是对 Topic 的“评论”,那么您的直通类可能是 TopicComment 或诸如此类。

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

于 2012-06-18T16:20:23.613 回答
1

我们需要了解 and 的含义IdeaTop以及它们的关系(为什么它是多对多),以便为您建议一个合适的名称。
但是,如果您找不到对此类有意义的名称,您可以使用类似IdeaTopTopIdea...

于 2012-06-18T15:58:13.320 回答