I am not sure I am thinking about this the correct way. I have a
admin/maintenance scaffold to amend live data and I need to track the
changes to data related to an order. e.g. change of address. I have
a order_transaction model which I would like to record all of the data
changes through the admin maintenance. I was hoping to use the AR
tracking methods to help me. Rails 2.3.8
I do the normal read the order in from the database, pick up the
attributes from params[:order} and then do an
@order.update_attributes(params[:order]) The problem is that on
success, @order.changes is nil. In the console:
ruby-1.8.7-p334 :024 > @o = Order.last
Order Load (0.4ms) SELECT * FROM “orders” ORDER BY orders.id DESC
LIMIT 1
±—±---------±---------±--------±--------±--------±--------
±-------±--------±--------±--------±--------±--------±--------
±--------±--------±--------±---------+
| id | quote_id | polic… | ip_a… | acco… | paym… | last… |
amount | cc_t… | cc_s… | cc_c… | dd_p… | dd_f… | dd_m… |
dd_a… | dd_s… | crea… | updat… |
±—±---------±---------±--------±--------±--------±--------
±-------±--------±--------±--------±--------±--------±--------
±--------±--------±--------±---------+
| 25 | 23 | 21 | 192… | Dona… | monthly | |
9.99 | | | | 8 | 2011… | false |
iIwv… | 4VcQ… | 2011… | 2011-… |
±—±---------±---------±--------±--------±--------±--------
±-------±--------±--------±--------±--------±--------±--------
±--------±--------±--------±---------+
1 row in set
ruby-1.8.7-p334 :025 > @o.update_attributes({:account_name => “Mickey
Mouse”})
Order Update (0.5ms) UPDATE “orders” SET “updated_at” =
‘2011-07-05 18:08:51’, “account_name” = ‘Mickey M.’ WHERE “id” = 25
=> true
ruby-1.8.7-p334 :027 > @o.changes
=> {}
ruby-1.8.7-p334 :028 > @o
±—±---------±---------±--------±--------±--------±--------
±-------±--------±--------±--------±--------±--------±--------
±--------±--------±--------±---------+
| id | quote_id | polic… | ip_a… | acco… | paym… | last… |
amount | cc_t… | cc_s… | cc_c… | dd_p… | dd_f… | dd_m… |
dd_a… | dd_s… | crea… | updat… |
±—±---------±---------±--------±--------±--------±--------
±-------±--------±--------±--------±--------±--------±--------
±--------±--------±--------±---------+
| 25 | 23 | 21 | 192… | Mick… | monthly | |
9.99 | | | | 8 | 2011… | false |
iIwv… | 4VcQ… | 2011… | 2011-… |
±—±---------±---------±--------±--------±--------±--------
±-------±--------±--------±--------±--------±--------±--------
±--------±--------±--------±---------+
1 row in set
ruby-1.8.7-p334 :029 >
Is there a way to find out what the changes are without looping
through the hash key and updating @order using the AR setter methods a
column at a time, save away @order.changes and then doing an
@order.save.
I only need to track changes from the admin screens, not from the live
side of the system. The solutions for tracking AR objects seem to be
all or nothing approach.
O.