0

コード スニペットとその結果の出力を次に示します。コードは属性を更新するように見えますが、データベースでレコードを手動で確認すると、変更はありません。これは .changed? によって確認されます。false を返します。私は何を間違えましたか?

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
4

1 に答える 1

1

使用<<は属性値を変更しません。thisticket.changes変更された値が含まれていないリターンハッシュを使用して確認できます。だから使ってみてください:

updatedsearchtermlist += ( ',' + importedsearchtermlist)

また:

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

それ以外の:

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

修正後もchanged?返されfalseます(デバッグ結果で)。なぜなら、レコードを保存した後にチェックしているからです。したがって、常に返されfalseます。

于 2013-03-12T19:21:47.597 に答える