Hi all. Maybe somebody can explain that to me: def create @orders = Order.find(:all, :conditions => ["products.member_id = ?", current_login.member.id]) # new payment @payment = Payment.new @payment.member = current_login.member @payment.status = Payment::STATUS_NEW @payment.save sum = 0.00 @orders.each do |order| order.payment = @payment order.save sum += 2950 end logger.info "COUNT A: #{@payment.orders_count}" @payment.update_attribute(:total, sum) @payment.reload logger.info "COUNT B: #{@payment.orders_count}" works fine but for one point: The counter cache is 0 after that. Reason is this. While the line order.payment = @payment generates the necessary code to update the counter_cache (twice): UPDATE payments SET `orders_count` = `orders_count` + 1 WHERE (`id` 1017343603) the update_attribute line updates more than necessary: UPDATE `payments` SET `created_at` = ''2008-06-03 18:42:03'', `member_id` = 762526581, `status` = 1, `orders_count` = 0, `total` = 5900.0, `updated_at` = ''2008-06-03 18:42:03'' WHERE `id` = 1017343603 Why is it updating not only the total and updated_at, but in addition a whole set of different columns, that where not even changed since the @payment.save? Am I doing something terribly wrong? I could handle this for the specific problem, but I see a lot of possible side effects here and would at least want to understand, what''s the reason for Rails to behave that way... -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On 3 Jun 2008, at 17:56, Thorsten Mueller wrote:> > the update_attribute line updates more than necessary: > > UPDATE `payments` SET `created_at` = ''2008-06-03 18:42:03'', > `member_id` > = 762526581, `status` = 1, `orders_count` = 0, `total` = 5900.0, > `updated_at` = ''2008-06-03 18:42:03'' WHERE `id` = 1017343603 > > Why is it updating not only the total and updated_at, but in > addition a > whole set of different columns, that where not even changed since the > @payment.save? >Just the way rails is. In 2.1 you can turn on partial_updates Fred> Am I doing something terribly wrong? > I could handle this for the specific problem, but I see a lot of > possible side effects here and would at least want to understand, > what''s > the reason for Rails to behave that way... > -- > Posted via http://www.ruby-forum.com/. > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
> > Just the way rails is. In 2.1 you can turn on partial_updates > > FredThanks Fred, so at least I know that I have to be a bit more careful with update_attributes. I will give partial_updates a try thorsten -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---