Создать набор столбцов с миграцией базы данных в рельсах - PullRequest
2 голосов
/ 22 апреля 2010

Мне нужно добавить новый столбец в мою таблицу пользователей в базе данных. Я хочу, чтобы тип столбца был установлен. Столбец представляет пол пользователя. В наборе должно быть два варианта. Одна форма мужской "м", а другая женская "ф".

Но я не нашел никакой документации для добавления столбца с заданным типом.

Как я могу это сделать?

Ответы [ 3 ]

7 голосов
/ 22 апреля 2010

Какой дб используется?MySQL?Если вы хотите использовать тип данных SET, вам придется делать это вручную, так как rails его не поддерживает.Тем не менее, я бы сделал просто

t.string :gender, :limit => 1

для удобства.

3 голосов
/ 23 апреля 2010

В вашей модели «Пользователи» необходимо добавить следующую строку, чтобы требовать ответы M / F.

validates_inclusion_of :gender, :in => %w( m f M F)
1 голос
/ 23 апреля 2010

Я думаю, что вы хотите добавить гендерный столбец с типом данных по умолчанию (поправьте меня, если я ошибаюсь), если так, то здесь будет шаг

, я предполагаю, что «M» для мужчиныи "F" для женщины (вы также можете использовать целые числа, если хотите)

создать миграцию

ruby script/generate migration add_gender_column_to_users

Это создаст миграцию для вас и, как следует из названия, добавитгендерный столбец к вашей таблице пользователей

в вашем действии миграции self.up добавьте это

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

здесь говорится, что мы добавляем гендерный столбец типа строки, и его значения по умолчанию: m'

и добавьте это к событиям self.down

remove_column :users, :gender

, чтобы ваша окончательная миграция выглядела примерно так

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

и выполняла

rake db:migrate

Вот и все, надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...