14

要表示組可以有多個用戶,並且用戶可以屬於多個組,我設置以下的關聯:Rails:爲什麼「has_many ...,:through => ...」關聯會導致「NameError:未初始化的常量...」

class Group < ActiveRecord::Base 
    has_many :users_groups 
    has_many :users, :through => :users_groups 
end 

class User < ActiveRecord::Base 
    has_many :users_groups 
    has_many :groups, :through => :users_groups 
end 

class UsersGroups < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :group 
end 

然而,當我鍵入:

Group.find(1).users 

我得到:

NameError: uninitialized constant Group::UsersGroup 

我在做什麼錯了?

回答

29

class UsersGroups應該是class UsersGroup。 ActiveRecord模型是單數 - 表格是複數。

+0

謝謝!我有一個叫做'UsersGroup'的模型,看起來很奇怪。我不希望其中一個是複數,另一個是單數。也許我應該將模型重命名爲UserGroupPair,以便表名稱爲'user_group_pairs'。你怎麼看 ? –

+1

當你有一個連接模型時,標準的做法是想出一個描述關聯的詞。例如,GroupMembership什麼的。只是爲了檢查,你確定你需要一個連接模型?如果連接不需要邏輯,那麼只需要一張表即可。 – Skilldrick

+0

你的意思是模型名稱'GroupMembership'和表名'group_membership',即兩個單數?我不確定我是否理解你關於擺脫連接表的第二點。你能詳細說明一下嗎? –

1

ActiveRecord嘗試單數化名稱,但您的班級實際上被命名爲UserGroups。將它重命名爲UserGroup。模型是單一的。

1

我認爲類羣組的變更名稱的用戶組

-1

另外,請注意,該模型的文件名也必須是單數形式。 在這種情況下,app/models/user_group.rb

+1

並非總是如此。在這種特殊情況下,這沒關係。 –

相關問題