Friday, May 6, 2011

Is the Rails update_attributes method the best choice for doing an update of a model in the database?

def update
  @album = Album.find(params[:id])
  if @album.update_attributes(params[:album])
    redirect_to(:action=>'list')
  else
    render(:action=>'edit')
  end

end

A Rails 1.1.6 tutorial that I'm covering recommends using the update_attributes method for updating a model, as in the example code from my controller listed above. Looking at the Rails documentation I'm wondering why the update method would not have been preferred, especially since it is named so logically.

From stackoverflow
  • Update takes an object id parameter and a set of attributes that otherwise work like update_attributes.

    So this (from AWDWR 3rd edition)

    Order.update(12, :name => "Barney", :email => "barney@bedrock.com")
    

    is equivalent to

    Order.find(12).update_attributes(:name => "Barney", :email => "barney@bedrock.com")
    

    So if all you want to do is update a row of known id with a set of attributes then I'd say there's no reason not to use update - it looks like that's the reason they wrote it!

    (Is there any way you can get your tutorial to upgrade from 1.1.6? It's pretty old and wasn't a particularly earth-shattering release when it was current. 1.2.6 was better - the last of the 1.xs, if I remember correctly).

    pez_dispenser : Thanks for the code snippet - that makes sense. No, it's not upgradeable, unfortunately. It's a lynda.com video series - it's really quite a good introduction to Rails for me although I will probably need to read a more up-to-date text after I finish it. First I need to understand the Big Picture, which I had been having a hard time with after reading the O'Reilly book "Head First Rails" a few months back.

0 comments:

Post a Comment