Interesting. Hopefully we can get an explanation as to why the increment 
methods are not done this way, and if the core team would be open to a patch.

- Alex


On Monday, January 21, 2013 at 6:01 AM, Matt Huggins wrote:

> Interestingly, ActiveRecord::CounterCache does this the appropriate way.
> 
> https://github.com/rails/rails/blob/master/activerecord/lib/active_record/counter_cache.rb#L72
> 
> On Sunday, January 20, 2013 6:56:37 PM UTC-5, ajsharp wrote:
> > The method is here: 
> > https://github.com/rails/rails/blob/master/activerecord/lib/active_record/persistence.rb#L288.
> > 
> > The method takes the in-memory attribute value and increments it by the 
> > specified amount. A safer approach (from an isolation standpoint) would be 
> > to let the database determine the value. Instead of telling the database 
> > what value to persist in the database, the SQL can written (at least for 
> > postgres) so that the database will atomically increment a value:
> > 
> > UPDATE "posts" SET view_count = view_count + 1 WHERE id=123;
> > 
> > Currently, rails generates the following SQL:
> > 
> > UPDATE "posts" SET "view_count" = 3, "updated_at" = '2013-01-20 
> > 23:20:24.154852' WHERE "posts"."id" = 123
> > 
> > It would be great to see a method like this to perform atomic update 
> > operations for databases that support it. If there's support for this, I'm 
> > happy to write the patch. Thanks! 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Ruby on Rails: Core" group.
> To view this discussion on the web visit 
> https://groups.google.com/d/msg/rubyonrails-core/-/p2dAMnSuYIkJ.
> To post to this group, send email to rubyonrails-core@googlegroups.com 
> (mailto:rubyonrails-core@googlegroups.com).
> To unsubscribe from this group, send email to 
> rubyonrails-core+unsubscr...@googlegroups.com 
> (mailto:rubyonrails-core+unsubscr...@googlegroups.com).
> For more options, visit this group at 
> http://groups.google.com/group/rubyonrails-core?hl=en.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To post to this group, send email to rubyonrails-core@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-core+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-core?hl=en.

Reply via email to