2012-02-07 14 views
0

私はユーザ(医者、患者、管理者)の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はと思います。 お願いします。

答えて

0

あなたのコードでは、nameは、現在のレコードのnameカラムの値ではないシンボルを表します。

名前で検索する場合は、名前の代わりにself.nameを使用します(名前だけでも機能するはずです)。だからあなたのコードになる(あなたがそれで何もしないので、私は@msgのVARを削除)あなただけの「MY_VAR」を使用する唯一の方法でVARを必要とする場合 「@my_varは、」インスタンス変数のためである)

def doMsgStatus 
    old = pair_was 
    Msg.find_all_by_own(self.name).each do |l| 
     l.read = 0 
     l.save 
    end 
end 
+0

THX !今は動作していますが、もし私が "user"テーブル内のいくつかのカラムを変更したい場合、例:self.name = MR.aa self.save、それらを追加することから "stack too deep"エラーが出ます。 – BoBoz

+0

これは通常after_updateコールバックにあります。そのため、ユーザーが更新されるたびにこのコールバックが起動されます。だから、あなたのユーザーを更新し、その更新の後に再びこの同じユーザーを変更するので、これはコールバックを再発するように再開する... – djtal64

関連する問題