2013-11-14 4 views
1

에 대한 특정 값에 열거 형과 기본을 만드는 방법 나는 모델새로운 객체

class Transaction < ActiveRecord::Base 

end 

내가 정수입니다 TRANSACTION_TYPE 열이 있습니다.

내가 같은 이름에 값을 매핑 할 수 있습니다 열거 만드는 방법 : 그래서 DB 열의

one_time = 1 
monthly = 2 
annually = 3 

를, 값이 나는 때마다, 또한 1, 2 또는 3

것 새로운 인스턴스를 만들거나 모델을 저장하고 필드처럼 설정되지 않은 : 그것은 1 (ON_TIME) 기본합니다

@transaction = Transaction.new(parmas) 

.

나는 이것을 어떻게 할 수 있을지 모르겠다.

답변

3

미트과 같은 대답, 약간의 변화

class Transaction < ActiveRecord::Base 
    before_create :set_default_for_type 

    def set_default_for_type 
    type = TransactionType.default unless type.present? 
    end 
end 

하지만 기본값 제어 할 수

class TransactionType 
    TYPES = { 
    :one_time => 1, 
    :monthly => 2, 
    :annually => 3 
    } 

    # use to bind to select helpers in UI as needed 
    def self.options 
    TYPES.map { |item| [item[0], item[1].to_s.titleize] } 
    end 

    def self.default 
    TYPES[:one_time] 
    end 
end 

하나의 방법 - 가장 좋은 방법은 당신의 데이터베이스 컬럼에 기본값을 적용하는 것입니다 그리고 거기에서 ActiveRecord가 자동으로 가져 오도록하십시오.

참고 : Transa ctionType ActiveRecord 객체가 상황에 따라 다릅니다. 즉,

# on Transaction with type_id:integer 
belongs_to :type, class_name: "TransactionType" 
1

아마도 이런 식으로 시도 할 수 있습니까? 루비는 정말

module TransactionType 
    ONCE = 1 
    MONTHLY = 2 
    ANUALLY = 3 
end 

는 다음과 같이 그 값에 액세스 할 수 있습니다 .. C 스타일 열거를 지원하지 않습니다

@transaction = Transaction.new(TransactionType::ONCE) 
+0

'Transaction.new'이 가능한 코드를 변경하지 않고도 기본 설정을 원하게 되나요? – Blankman

+0

'Transaction.new'에 해시를 전달하고 있습니까?만약 그렇다면, 당신은'transaction_type' 매개 변수 또는 뭔가를 추가 할 수 있으며, 그 내부를 확인하십시오. 만약 당신이 명시 적으로'transaction_type'을 넘겨주지 않는다면, 기본값은'ONCE'입니다. 그렇지 않으면, 나는 그렇게 생각하지 않는다. – yamafontes

2

당신은 상수 중 하나를 같은 Transaction 모델을 만들어 값을 매핑 할 수 있습니다 또는 새 모듈을 만들고 Transaction 모델에서 @KepaniHaole

에 의해 설명 된 바와 같이 그 내부에 배치함으로써, 당신은 그것을 좋아 할 수 있습니다

이와

def up 
    change_column :transactions, :transaction_type, :default => Transaction::TRANSACTION_TYPES['one_time'] 
end 

만들 때마다 : 3,373,210

당신은 가진 새로운 마이그레이션을 만들 transaction_type 컬럼에 디폴트 값을 추가하려면

Transaction::TRANSACTION_TYPES['one_time'] # => 1 
Transaction::TRANSACTION_TYPES['monthly']  # => 2 
Transaction::TRANSACTION_TYPES['monthly']  # => 3 

로 상수에 액세스하여이 값에 액세스 할 수 있습니다 Transaction 개체는 transaction_type을 전달하지 않고 기본값 1을 저장합니다. 기본적으로

관련 문제