我的系统有3个用户角色(医生,病人,管理员) 和 患者用户属于医生用户。(将每位患者配对医生) 我通过在表用户中创建一个名为“pair”
的新列来处理这个问题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
(拥有另一个我用户识别其msg是这个的列)
我想要做的是当管理员在某些用户中编辑“配对”时。 在这种情况下,如果admin编辑对user1, 我想将属于user1的所有“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
这是我的一些代码
我的用户模型(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:name是空的,所以rails找不到任何msg_by_own并且所有的msg状态都是一样的。 请帮帮我。
答案 0 :(得分:0)
在您的代码中:name仅表示符号,而不是当前记录的name列的值。
如果要按名称搜索,请使用self.name而不是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