ChatGPT解决这个技术问题 Extra ChatGPT

Assigning default value while creating migration file

rails generate migration AddRetweetsCountToTweet retweets_count:integer 

Ok I use above line to create migration file that automatically generates code in the generated file to add a column to a model Tweet with datatype integer. Now I want to add default value to the added column while generating the migration file. Is that possible? I googled it but couldn't find. Guys need help.

see the RailsGuide on the subject: guides.rubyonrails.org/migrations.html the information you are looking for is in the first section Anatomy of a Migration
I know exactly what you mean. I kept trying to set a default value as well, and it was sort of a pain trying to find information. Just generating the bare SQL was easier, though then there's no migration in version control.

t
typeoneerror

Default migration generator does not handle default values (column modifiers are supported but do not include default or null), but you could create your own generator.

You can also manually update the migration file prior to running rake db:migrate by adding the options to add_column:

add_column :tweet, :retweets_count, :integer, :null => false, :default => 0

... and read Rails API


Ok thanks for the reply. I thought it would be great if default migration generator would provide option to handle default values so that I do not have to edit the migration file after being generated in order to specify default value.
J
Jits
t.integer :retweets_count, :default => 0

... should work.

See the Rails guide on migrations


M
MSC

Yes, I couldn't see how to use 'default' in the migration generator command either but was able to specify a default value for a new string column as follows by amending the generated migration file before applying "rake db:migrate":

class AddColumnToWidgets < ActiveRecord::Migration
  def change
    add_column :widgets, :colour, :string, default: 'red'
  end
end

This adds a new column called 'colour' to my 'Widget' model and sets the default 'colour' of new widgets to 'red'.


(This was in Rails 4.2.)
M
Madhan Ayyasamy

I tried t.boolean :active, :default => 1 in migration file for creating entire table. After ran that migration when i checked in db it made as null. Even though i told default as "1". After that slightly i changed migration file like this then it worked for me for setting default value on create table migration file.

t.boolean :active, :null => false,:default =>1. Worked for me.

My Rails framework version is 4.0.0


A
Artur Pedrosa

You would have to first create your migration for the model basics then you create another migration to modify your previous using the change_column ...

def change
    change_column :widgets, :colour, :string, default: 'red'
end