2012-06-18 240 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