2012-06-18 128 views
3

我已经阅读了关于rails 3中的多对多关系,并且看到HABTM已被“弃用”,因为在大多数情况下应该使用has_many :through通过协会的has_many的好名字

我看到很多例子,其中Join Model有一个明确的名字,例如Magazine,Suscriber = Subscriptions。

但在我的情况下,我找不到一个好名字:/有没有我应该知道的任何约定?顶部包含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而不是HABTM”。
因此,顶部包含1或*思想和想法可以属于1或*顶部。对于想法来说,它更像是一个belongs_to_many,但它并不存在于ror中。

+0

什么是顶部,以及如何它包含想法? – Brandan

+1

成为[精确](http://guides.rubyonrails.org/association_basics.html#additional-column-methods)_“不建议在has_and_belongs_to_many关联中在连接表上使用额外的属性。”_ – Stefan

+0

Your Top (就像一个排名)听起来像一个快照,如果想法排名可以随着时间而改变... sooo也许快照有很多排名(某些时候计算一些数字),并通过排名有很多想法。一个想法可以有许多排名(随着时间的推移),并且随着时间的推移排序会有很多快照。仍然不确定我是否讨论你的问题定义... – railsdog

回答

3

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

@gabrielhilal提出了一个很好的建议,但我建议备份一下,并将IdeaTop表重命名为不太透明。例如,如果Top是主题的简称,Idea看起来更像是关于主题的“评论”,那么您的课程可以是TopicComment或Whatnot。

无论如何,我认为你应该开始重新命名这些表格以使其更有意义(或向我们解释它们,这样我们就能理解)然后继续使用@gabrielhilal建议只使用这两个表的组合来命名联接表 - 这是常见的做法,除非第三张表具有其自己的具体含义(或具有自己的属性),如产品+销售=发票(其中发票是连接表)

+0

嗨thx为您的答复。我刚刚编辑了我的原文,以解释我的模型的含义。一个想法没有子观点(至少现在)。是的,也许IdeaTop是要走的路,但我不觉得它很优雅:/ – Pontek

+0

只是回答我的线程。我终于带着这样的东西: 'class LineTop Pontek

1

我们需要了解IdeaTop的含义以及它们之间的关系(为什么它是多对多的),以便为您建议一个适当的名称。
但是,如果你不能为这个类找到意义的名字,你可以使用像IdeaTopTopIdea ...

+0

根据Rails约定,在这种情况下它应该是IdeaTop,因为表名应按字母顺序排列。快速搜索引擎提供了这个页面:http://itsignals.cascadia.com.au/?p = 7,但我确定我已经阅读过官方消息。 – emrass

+0

嘿thx您的答复。我刚刚编辑了我的原文,以解释我的模型的含义。是的,也许IdeaTop是要走的路,但我不觉得它很优雅:/ – Pontek