I know, but the problem is that 'update_attribute' is misleading. I'm wondering why don't we just deprecate it and force people to use the better "update_column" instead. Or at least make "update_attribute" behave like "update_column".
On Wednesday, March 12, 2014 11:03:30 PM UTC+7, Rodrigo Rosenfeld Rosas wrote: > > You should have the database constraint even if update_attribute worked > exactly the way you thought it would. It's even stated in the documentation > for validates_uniqueness_of: > > > http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#method-i-validates_uniqueness_of > > See "Concurrency and integrity". Unless your application is not > multi-thread and has a single worker process, but I don't think this is the > case, right? ;) > > Best, > Rodrigo. > > On 12-03-2014 12:30, Anh Nguyen wrote: > > Sorry, it should be > > user1.update_attribute(:name, 'New Name') > > I switched to update_column but the old code already created some dirty > records in the DB. I should have created validation at DB level instead of > trusted AR completely. > > On Wednesday, March 12, 2014 7:27:41 PM UTC+7, Xavier Noria wrote: >> >> update_attribute and update_attributes do this: >> >> 1) They update the passed attributes in the receiver. >> >> 2) They save the receiver. >> >> The arguments say which attributes have to be updated, and as a >> convenience the model is saved (callbacks run, timestamps are updated, >> etc.). >> >> In addition, update_attribute has some extra semantics, in particular >> validations are skipped and that's why it succeeded in your example. (Was >> the example written by hand? the call does not seem to be valid.) >> >> In recent version of Rails you can use update_column(s), whose >> semantics are less confusing than the ones of update_attribute. But it is >> also going to skip validations and other AR stuff because it issues >> straight SQL. >> >> > -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-core+unsubscr...@googlegroups.com. To post to this group, send email to rubyonrails-core@googlegroups.com. Visit this group at http://groups.google.com/group/rubyonrails-core. For more options, visit https://groups.google.com/d/optout.