2013-03-12 113 views
0

這是一個代碼片段及其結果輸出。代碼似乎更新屬性,但是當我在數據庫中手動檢查記錄時,沒有任何更改。這是由.changed確認的。返回false。我做錯了什麼?ActiveRecord沒有更新屬性

class Ticket < ActiveRecord::Base 
##+-----------------+-----------------------+------+-----+---------+-------+ 
##| Field   | Type     | Null | Key | Default | Extra | 
##+-----------------+-----------------------+------+-----+---------+-------+ 
##| ticketid  | bigint(20) unsigned | NO | PRI | NULL |  | 
##| ticketnumber | bigint(20) unsigned | NO |  | NULL |  | 
##| contactname  | char(40)    | YES |  | NULL |  | 
##| department  | char(40)    | YES |  | NULL |  | 
##| tech   | char(40)    | YES |  | NULL |  | 
##| timeopened  | char(18)    | YES |  | NULL |  | 
##| timelastchanged | char(18)    | YES |  | NULL |  | 
##| mintuesopen  | mediumint(8) unsigned | YES |  | NULL |  | 
##| searchtermlist | varchar(255)   | YES |  | NULL |  | 
##+-----------------+-----------------------+------+-----+---------+-------+ 

attr_accessible :searchtermlist, :minutesopen, :timelastchanged, :tech 

end 

.... 

thisticket = Ticket.find_by_ticketid(ticketid) 
    if thisticket != nil 
     puts "---Ticket #{ticketid} Found!" 
     if thisticket.searchtermlist.include? importedsearchtermlist 
      puts "---Search term list current! Skipping..." 
     else 
      puts "---Updating search term list for ticket #{ticketid}" 
      puts importedsearchtermlist 
      puts thisticket.ticketid 
      puts thisticket.searchtermlist 
      updatedsearchtermlist = thisticket.searchtermlist << "," << importedsearchtermlist 
      puts updatedsearchtermlist 
      thisticket.searchtermlist = updatedsearchtermlist 
      result = thisticket.save! 
      puts result 
      puts thisticket.changed? 
      puts thisticket.searchtermlist 
      sleep(60) 
     end 

和輸出:

---Ticket 47048 Found! 
---Updating search term list for ticket 47048 
virus 
47048 
update 
update,virus 
true 
false 
update,virus 

回答

1

使用<<是不會改變的屬性值。您可以使用thisticket.changes返回散列,其中不包含更改的值。因此,嘗試使用:

updatedsearchtermlist += (',' + importedsearchtermlist) 

或:

updatedsearchtermlist = [updatedsearchtermlist, importedsearchtermlist].join(',') 

代替:

updatedsearchtermlist = thisticket.searchtermlist << "," << importedsearchtermlist 

固定後也changed?將返回false(在你的調試結果)。因爲,您在保存記錄後檢查它。所以它總是會返回false

+0

第二個很棒!謝謝,代碼! – 2013-03-12 21:07:33

相關問題