2009-08-17 7 views
0

Ich habe ein Modell-Gruppe und Modell BenutzerWie kann ich has_many: through Join-Modellattribut in Rails aktualisieren?

Sie sind beide Richtungen verbunden mit „has_many: durch => groups_users“

groups_users Tabelle hat ein Attribut namens Moderator, der angibt, ob ein Benutzer ein Moderator das ist Gruppe

wenn i Modul Attribut beitreten zu aktualisieren versuche, erhalte ich einen Fehler

Art, wie ich es jetzt tue:

@[email protected]_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 

-Code produziert mysql Fehler:

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

Gibt es schönere Art und Weise, dies zu tun oder sollte ich id-Spalte zu den groups_users hinzufügen join auf id Modelltisch und indizieren?

Antwort

5

Ja, Sie sollten eine id Spalte in der Tabelle groups_users erstellen.

Da Sie has_many :through verwenden, sollte die Join-Tabelle eine id-Spalte enthalten (was ein automatisch inkrementierter Primärschlüssel ist). Dies liegt daran, dass für jedes Rails-Modell eine ID-Spalte und für die Join-Tabelle ein eigenes Modell (GroupsUser) erforderlich ist. BTW, möchten Sie vielleicht in etwas wie Mitgliedschaft umbenennen).

Die andere Art der Viele-zu-Viele-Assoziation ist has_and_belongs_to_many. Ich gehe davon aus, dass Sie migriert, weil das nicht eine id Spalte in der Join-Tabelle verwendet. Weitere Informationen zu diesen beiden Zuordnungen finden Sie unter Railscasts episode zu diesem Thema.

Verwandte Themen