私はユーザ(医者、患者、管理者)の3つの役割を持つシステムを持っています と 患者のユーザは医者に属します私は「ペア」"after_update"を使用してモデルに編集されたパラメータを渡す方法
example:
user1 patient name Mr.A pair:user2
user2 doctor name Dr.D pair:null
user3 doctor name Dr.Z pair:null
と患者のユーザーと呼ばれるテーブルのユーザーの新しい列を作成することによって、「MSG」。(別のテーブル)
example:
msg1:aaa own:user1 status:0,
msg2:bbb own:user1 status:1,
msg3:ccc own:user1 status:1
を持っている(自分が別の列Iのユーザであることを扱う) どのmsgがこれであるかを識別する)
私がしたいのは、管理者が一部のユーザーで「ペア」を編集するときです。この場合、 私はここで0
example:
admin edit user1 - from pair:user2 to pair:user3
then
msg1:aaa own:user1 status:0,
msg2:bbb own:user1 status:1,
msg3:ccc own:user1 status:1
にuser1に属するすべての「MSG」の状態のすべてを変更したい 、USER1の管理編集ペアならば私のコード
私のユーザーの一部でありますモデル(after_update一部)(これは間違っている):名前は空なので、レールは任意のmsg_by_ownを見つけることができないとMSG状況のすべてが同じである:上記のコードから
after_update :doMsgStatus, :if => :pair_changed?
def doMsgStatus
old = pair_was
@msg = Msg.find_all_by_own(:name)
@msg.each do |l|
l.read = 0
l.save
end
end
は、私はparamはと思います。 お願いします。
THX !今は動作していますが、もし私が "user"テーブル内のいくつかのカラムを変更したい場合、例:self.name = MR.aa self.save、それらを追加することから "stack too deep"エラーが出ます。 – BoBoz
これは通常after_updateコールバックにあります。そのため、ユーザーが更新されるたびにこのコールバックが起動されます。だから、あなたのユーザーを更新し、その更新の後に再びこの同じユーザーを変更するので、これはコールバックを再発するように再開する... – djtal64