2011-03-31 89 views
2

我基於SO帖子創建了一個名爲UserHasMessages的模型。我認爲這似乎給我帶來了一些挑戰:如果我用Rails 3複數命名模型,該怎麼辦?

  • 我如何參考has_many?我應該使用has_many :user_has_messageses

  • 我該如何做連接?我曾嘗試User.joins(:user_has_messages),這是可悲的:(

問:

我應該以某種方式將名稱更改爲UserHasMessage,如果是這樣,怎麼

?如果我繼續爲複數,我該如何處理這些案件

回答

3

你可以往其中加一個新的遷移

rails g migration rename_user_has_messages 

你寫:

class RenameUserHasMessages < ActiveRecord::Migration 
    def self.up 
    rename_table :user_has_messages, :user_messages 
    end 

    def self.down 
    rename_table :user_messages, :user_has_messages 
    end 
end 

(中表總是複數)

運行遷移。

將文件從user_has_messages.rb重命名爲user_message.rb,並將您的文件從UserHasMessages重命名爲UserMessage

完成:)

+0

啊,好吧,甜蜜,謝謝你的一步一步來 – Angela 2011-04-01 03:39:03

4

你可以用你的遺留表使用相同的語法:

class OtherClass < ActiveRecord::Base 
    has_many :user_has_messages, :class_name => 'UserHasMessages' 
end 
+0

感謝,這與我們的數據庫遺留下來的幫助! – Simonini 2013-04-12 14:52:58

2

避免以S結尾的類名,就像魔鬼避免聖水一樣。 UserHasMessages這個名字是一個非常糟糕的選擇。你不會創建一個數據庫表來檢查某些東西。相反,您有一個用戶模型,一個消息模型和一個UserMessage模型。然後,如果你想檢查用戶消息,你只需創建一個方法來做到這一點。該協會應該是:

User has many messages through user_messages 

你會得到像current_user.messages這樣的用戶消息。

我強烈建議您將您的設計更改爲我所描述的:)

+0

我該怎麼做? – Angela 2011-04-01 03:38:35

+0

@SpyrosP ...順便說一句,這將有助於解決:我一直有的連接問題? – Angela 2011-04-01 04:11:47

+0

絕對。如果你這樣做,你不需要加入,因爲activerecord會自動爲你做。 – Spyros 2011-04-01 04:48:45

相關問題