2016-06-21 4 views
0

Я хотел бы изменить поле gender, Первоначально я объявил поле gender логическим значением true или false. но теперь я хочу, чтобы он был изменен как список (Мужской, Женский, Другой).Удалить boolean и добавить список в ruby ​​on rails

class AddExtraFieldsToUser < ActiveRecord::Migration 
    def change 
    add_column :users, :phone_number, :string 
    add_column :users, :date_of_birth, :datetime 
    add_column :users, :gender, :boolean, default: false 
    add_column :users, :live_in, :string 
    add_column :users, :description, :text 

    end 
end 

Могу ли я изменить следующим образом .... пожалуйста, дайте мне знать правильный путь ...

я думал, что делать rails g migration RemovegenderFromUsers gender:boolean затем rake db:migrate с последующим созданием нового один

rails g migration AddGenderToUsers gender:select 

user.rb

GENDER_TYPES = ["Male", "Female", "Other"] 

html

<%= f.select :gender, User::GENDER_TYPES %> 

Вышеупомянутый процесс правильный или любым другим способом?

ответ

1

Выберите не тип поля базы данных, если вы хотите это сделать, то сделать это как этот

rails g migration AddGenderToUsers gender:integer 

В изменении миграции файлов это нравится:

change_column :users, :gender, :integer, default: 0 

Для страницы формы это сделать :

<%= f.select :gender, User::GENDER_TYPES.each_with_index.map { |gender, index| [gender, index] } %> 

И в пользовательской модели вы можете определить функцию, чтобы получить пол имя для отображения

def gender_name 
    GENDER_TYPES[gender] 
end 
+0

или в качестве альтернативы, вы можете определить 'gender' быть' string'. Это приведет к снижению производительности, хотя, скорее всего, разница будет незначительной. –

+0

Если вы собираетесь объявить массив разных полов, подумайте об использовании перечисления, так как у вас будет множество встроенных методов рельсов, которые помогут вам справиться с гендерными значениями. – hypern

+0

1) должен ли я написать change_column: users,: gender,: integer, default: 0 в уже сгенерированном файле миграции или в новом файле AddGenderToUsers? 2) Где я могу объявить мужчину-мужчину другим. – MSK

1

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

**change_column :table_name, :column_name, :type** 
Смежные вопросы