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

相關問題