2012-02-07 80 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 

和患者用户有“味精”。(另一个表)

example: 
msg1:aaa own:user1 status:0, 
msg2:bbb own:user1 status:1, 
msg3:ccc own:user1 status:1 

(自己是另一个专栏中,我的用户的新列以确定其味精是什么)

我想要做的是当管理员编辑“对”在某些用户。 在这种情况下,如果管理员编辑对用户user1, 我想改变这一切属于所有的“味精”的状态为user1 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 

这里是我的一些代码

我的用户模型(after_update部分)(这是错误的):

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:名称是空的,所以轨道找不到任何msg_by_own和所有的味精状态是一样的。 请帮助我。

回答

0

在您的代码中:名称仅表示符号而不是当前记录的名称列的值。

如果要按名称搜索,请使用self.name而不是名称(单独使用名称也可以)。所以,你的代码成为(我删除@msg变种,因为你什么都不做吧) “@my_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,我从添加这些错误中得到“堆栈太深”的错误。 – BoBoz 2012-02-10 10:23:26

+0

这是正常的,你在after_update回调,所以每次更新用户这个回调被触发。因此,要恢复更新用户,在更新之后,您再次更改同一用户,以便再次触发回叫,等等。 – djtal64 2012-02-10 12:56:39

相关问题