0

モデルグループとモデルユーザーがいます

それらは「has_many:through=>groups_users」で双方向に接続されています

groups_usersテーブルには、ユーザーがグループのモデレーターであるかどうかを指定する、moderatorと呼ばれる属性があります。

参加モジュール属性を更新しようとすると、間違いが発生します

私が今それをしている方法:

@group_membership=@group.groups_users.find_by_user_id(@user.id)

if @group_membership!=nil
 @group_membership.moderator=true
else
  @group_membership=GroupsUser.new(:user_id => @user.id, :group_id => @group.id, :moderator => true)
end

@group_membership.save

コードはmysqlの間違いを引き起こしています:

 Unknown column 'id' in 'where clause': UPDATE `groups_users` SET `moderator` = 1 WHERE `id` = NULL

それを行うためのより良い方法はありますか、それともgroups_users結合モデルテーブルにid列を追加してidにインデックスを付ける必要がありますか?

4

1 に答える 1

5

はい、idgroups_usersテーブルに列を作成する必要があります。

has_many :through結合テーブルを使用しているので、そのid上に列が必要です(これは自動インクリメントの主キーです)。これは、すべてのRailsモデルにid列が必要であり、結合テーブルに独自のモデル(GroupsUser)があるためです。ところで、あなたはメンバーシップのようなものに名前を変更したいかもしれません)。

他のタイプの多対多の関連付けはhas_and_belongs_to_manyです。結合テーブルの列を使用しないため、これから移行したと想定しています。idこれら2つの関連付けの詳細については、このトピックに関する私のRailscastsエピソードを確認してください。

于 2009-08-17T17:44:34.493 に答える