2016-06-21 2 views
0

性別フィールドを変更したいのですが、 最初はジェンダーフィールドを真または偽のブール値として宣言しました。しかし、今私はリスト(男性、女性、その他)として変更したい。ruby​​を削除してrubyでリストを追加する

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 AddGenderToUsers gender:select 

を作成することによって、その後rake db:migrateその後、rails g migration RemovegenderFromUsers gender:boolean をやって考えますuser.rb

​​

html

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

上記の手順は正しいですか他の方法ですか?

答えて

1

選択はあなたがそれをしたい場合は、移行ファイルには、この

rails g migration AddGenderToUsers gender:integer 

のようにそれを行うには、このように変更し、データベースのフィールドタイプではありません:フォームページについて

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

は、これを行います:

ユーザーモデルでは、表示する性別の名前を取得する機能を定義することができます

def gender_name 
    GENDER_TYPES[gender] 
end 
+0

またはその代わりに、あなたは '' STRING'するgender'定義することができます。これにより、パフォーマンスは若干低下しますが、その差はごくわずかです。 –

+0

異なる性別の配列を宣言する場合は、ジェンダー値を扱う際に役立つ多数の組み込みメソッドが用意されているので、列挙型の使用を検討してください。 – hypern

+0

1)change_column:users、:gender、:integer、既定値:0は、すでに生成されたマイグレーションファイルまたは新しく生成されたAddGenderToUsersファイルに書き込む必要がありますか? 2)私はどこで男性女性の他を宣言できますか? – MSK

1

Ahmad Hussainの答えは正しいです。リストはデータベースのフィールド型ではありません。あなたが列タイプに変更するには、移行生成する必要があり :

**change_column :table_name, :column_name, :type** 
関連する問題