14

グループに複数のユーザーを含めることができ、ユーザーは複数のグループ私が入力したときに、しかしRails:なぜ "has_many ...、:through => ..."という結びつきによって "NameError:uninitialized constant ..."という結果になるか

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'を意味しますか?私はあなたがジョインテーブルを取り除くことについての2番目の点を理解しているかどうかはわかりません。少し詳しく説明できますか? –

1

ActiveRecordは名前を特異化しようとしますが、実際にはクラス名はUserGroupsです。名前をUserGroupに変更します。モデルは特異です。私はクラスのユーザーグループの変更の名前はまた

1

、モデルのファイル名はまた、単数形でなければならないことに注意してください。 この場合、app/models/user_group.rb

-1

をユーザーグループと思う

+1

必ずしもそうではありません。この特定のケースでは大丈夫です。 –