Search code examples
ruby-on-railsruby-on-rails-3optimizationactiverecordquery-optimization

Best practise for updating single attribute on multiple records


I am writing an exporter within my current Rails3 project right now. This exporter has to mark every exported record as "exported" (bool). I know how to do this easily in a loop, but honestly, it doesn't feel very good to let Rails query the database, say, 300 times in a row, just to set one field on 300 records.

Does anyone know if there's a good way to optimize this? Should I play manually with prepared statements, or does Rails3 take care of this automagically? Is there another SQL command to do this in one step or something?

Thanks for your help

  • Arne

Solution

  • Use update_all method on Class. From Rails API:

    # Update all books with 'Rails' in their title
    Book.update_all "author = 'David'", "title LIKE '%Rails%'"