Update a column, all rows

前端 未结 4 1737

I added a new column to my table but I forgot to add the :default option. Now I want to populate that column on every single row.

Is there a way to do with using the con

相关标签:
4条回答
  • 2021-01-31 01:45

    you can do like this:

    Foo.update_all(new_column: "bar")

    0 讨论(0)
  • 2021-01-31 01:49

    Of course you can use smth like Foo.update_all(:myattribute => "value"), but it'll modify only already created data. To set default value for all "future" data it's a good way to create a separate migration like this:

    rails generate migration AddDefaultValueToFoo
    

    Modify new migration (for ex. myattribute has a string type) like this:

    class AddDefaultValueToFoo < ActiveRecord::Migration
      def self.up
        change_column :foos, :myattribute, :string, :default => "value"
        Foo.update_all(:myattribute => "value")
      end
    end
    
    0 讨论(0)
  • 2021-01-31 02:00

    Try this:

    Foo.update_all(some_column: "bar")
    

    This will generate SQL query to database:

    UPDATE "foos" SET "some_column" = "bar"; 
    
    0 讨论(0)
  • 2021-01-31 02:06

    Since you already created the new field in a previous migration, create a brand new migration:

    rails g migration UpdateFoos
    

    Modify the migration:

    def self.up    
      say_with_time "Updating foos..." do
        Foo.find(:all).each do |f|
          f.update_attribute :myattribute, 'value'
        end
      end
    end
    
    # from command line
    Rake db:migrate
    

    Let me know if this works, it might need a few adjustments. See rails docs for more:

    0 讨论(0)
提交回复
热议问题