как использовать after_update для передачи отредактированного параметра в модель - PullRequest
0 голосов
/ 07 февраля 2012

У меня есть система, которая имеет 3 роли пользователя (врач, пациент, администратор) а также пользователь пациента принадлежит врачу (для привязки каждого пациента к врачу) Я справляюсь с этим, создавая новый столбец в таблице user под названием "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

(собственный - это другой пользователь I столбца, чтобы определить, чье это сообщение)

Что я хочу сделать, так это когда администратор редактирует «пару» в каком-то пользователе. В этом случае, если администратор отредактирует пару user1, Я хочу изменить все статусы всех сообщений "msg", которые принадлежат 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: name пусто, поэтому rails не может найти ни одного сообщения msg_by_own, и все состояния сообщений совпадают. Помогите мне, пожалуйста.

1 Ответ

0 голосов
/ 09 февраля 2012

В вашем коде: имя представляет собой просто символ, а не значение столбца имени текущей записи.

Если вы хотите искать по имени, используйте self.name вместо name (тоже должно работать только имя). Таким образом, ваш код становится (я удаляю @msg var, так как вы ничего не делаете с ним) «@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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...