2013-03-12 118 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