1

私はモデルを持っています

class Transaction < ActiveRecord::Base

end

整数の transaction_type 列があります。

値を次のような名前にマップできる列挙を作成するにはどうすればよいですか。

one_time = 1
monthly = 2
annually = 3

したがって、db 列の値は 1、2、または 3 になります。

また、新しいインスタンスを作成したり、モデルを保存したりするたびに、フィールドが次のように設定されていませんでした。

@transaction = Transaction.new(params)

デフォルトは 1 (on_time) です。

どうすればこれができるかわかりませんか?

4

3 に答える 3

2

Transaction@KepaniHaoleで説明されているように、同じモデルで定数を作成するか、新しいモジュールを作成してその中に配置することで、値をマップできます

モデルではTransaction、次のように実行できます。

class Transaction < ActiveRecord::Base

  TRANSACTION_TYPES = { 'one_time' => 1, 'monthly' => 2, 'monthly' => 3 }

end

次のように定数にアクセスすることで、これらの値にアクセスできます。

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

列にデフォルト値を追加するには、transaction_type次を使用して新しい移行を作成します。

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

Transactionこれにより、を渡さずにオブジェクトを作成するたびtransaction_typeに、デフォルト値 1 が格納されます。

于 2013-11-14T18:59:26.577 に答える
1

多分あなたはこのようなことを試すことができますか?Ruby は実際には C スタイルの列挙型をサポートしていません。

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

次に、次のように値にアクセスできます。

@transaction = Transaction.new(TransactionType::ONCE)
于 2013-11-14T18:43:24.897 に答える