2016-06-21 3 views
0

성별 필드를 수정하고 싶습니다. 처음에는 gender 필드를 부울 true 또는 false로 선언했습니다. 하지만 지금은 목록 (남성, 여성, 기타)으로 변경하고 싶습니다. 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:migraterails g migration RemovegenderFromUsers gender:boolean 일을 생각 ... 내가 올바른 방법을 알려 주시기 바랍니다 .... 다음과 같이 수정할 수 있습니다 user.rb

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

HTML

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

위의 과정이 정확하거나 다른 방법일까요? 양식 페이지에 대한

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

이 작업을 수행 : 당신이 그것을 수행하려는 경우

답변

1

선택은이를 좋아하는 다음 마이그레이션 파일 변경에서이

rails g migration AddGenderToUsers gender:integer 

처럼 할 데이터베이스 필드 형식이 아닙니다 :

그리고 사용자 모델에서 성별 이름을 표시하도록 기능을 정의하면

def gender_name 
    GENDER_TYPES[gender] 
end 
+0

또는 대안을 사용자가 정의 할 수'gender'는'string' 수 있습니다. 이 차이는 무시할 수는 있지만 성능이 약간 느려집니다. –

+0

다른 성별의 배열을 선언하려는 경우 성별 값을 처리하는 데 도움이되는 몇 가지 레일 내장 메서드가 있으므로 enum을 사용하는 것이 좋습니다. – hypern

+0

1) 이미 생성 된 마이그레이션 파일이나 새로 생성 된 AddGenderToUsers 파일에서 change_column : users, : gender, : integer, default : 0을 쓸 수 있습니까? 2) 어디에서 남성 여성 기타를 선언 할 수 있습니까? – MSK

1

Ahmad Hussain의 대답이 정확합니다. 목록은 데이터베이스 필드 유형이 아닙니다. 당신은 열 유형 변경하는 마이그레이션을 생성해야합니다 :

**change_column :table_name, :column_name, :type** 
관련 문제