Lisinge
Lisinge

Reputation: 2057

Create a set column with database migration in rails

I need to add a new column to my users table in the database. I want the type of the column to be set. The column represents the users gender. There should be two options to the set. One form Male "m" and the other for Female "f".

But I haven't found any documentation for adding a column with the set type.

How can I do this?

Upvotes: 2

Views: 3117

Answers (3)

sameera207
sameera207

Reputation: 16629

I think you want to add the gender column with a default datatype (correct me if I'm wrong), If so there would be the step

here I'm assuming 'M' is for male and "F" is for female (you can use integers also if you wish)

create a migration

ruby script/generate migration add_gender_column_to_users

This will create a migration for you and as the name implies it will add a gender column to your users table

in your migrations self.up action add this

add_column :users, :gender, :string, :default => 'm'

here it says we are adding a gender column of string type and its default values is 'm'

and add this to self.down events

remove_column :users, :gender

so your final migration will look something like this

class AddGenderColumnToUsers < ActiveRecord::Migration
  def self.up
    add_column :users, :gender, :string, :default => 'm'
  end
  def self.down
    remove_column :users, :gender
  end
end

and do a

rake db:migrate

thats it, hope this helps

Upvotes: 1

Jason Noble
Jason Noble

Reputation: 3766

In your Users model, you should add the following line to require M/F answers.

validates_inclusion_of :gender, :in => %w( m f M F)

Upvotes: 3

Evgeny Shadchnev
Evgeny Shadchnev

Reputation: 7388

What db is used? mysql? If you're want to use SET datatype, you'll have to do it manually, as rails doesn't support it. However, I'd do just

t.string :gender, :limit => 1

for the sake of convenience.

Upvotes: 7

Related Questions