3

:has_many, :throughモデルには次の関連付けがあります。

グループモデル:

has_many :group_users
has_many :users, :through => :group_users

ユーザーモデル:

has_many :group_users
has_many :groups, :before_add => :validates_group, :through => :group_users

GroupsUsersモデル:

belongs_to :group
belongs_to :user

このgroups_users表には、ユーザーのステータス(アクティブまたは非アクティブ)に対応する追加の列があります。ユーザーがグループから自分自身を削除したときに、その列を更新できるようにする必要があります。update_attributes結合テーブルでどのように使用できますか?

4

1 に答える 1

2

これには少し奇妙なことがあるので、念のために言っておきますが、通常は、接続を保持しているgroups_userレコードを削除して、グループからユーザーを削除します。

そのレコードを保持し、非アクティブとしてマークするだけの場合は、ユーザーがグループのユーザーコレクションに引き続き表示されることを意味します。その逆も同様です。

それが本当にあなたが望むものであると仮定すると、レコードは他のレコードと同じように更新可能です。ユーザー側またはグループ側のいずれかからアクセスして、通常どおりに編集できます。

たとえば、ユーザーu、グループg、groups_userguの場合

gu = g.groups_users.where('user_id = ?',u.id) 
gu.update_attributes (:status => 'inactive')

また、これを行うと、グループのアクティブユーザーのみ、またはユーザーのアクティブグループが必要になることがよくあることに注意してください。この状況でこれを行う方法については、この投稿を参照してください 。Rails has_many:through結合モデルの追加属性による検索

于 2012-06-19T21:50:26.317 に答える