如何使用“after_update”将编辑过的参数传递给模型

时间:2012-02-07 18:28:55

标签: ruby-on-rails ruby-on-rails-3 activerecord

我的系统有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状态都是一样的。 请帮帮我。

1 个答案:

答案 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