Rails 3移行で列挙列をどのように記述しますか?
Rails 4.1 列挙型を含む 今のところ!
あなただけを書くことができます
class User < ActiveRecord::Base
enum status: [ :admin, :user, :banned ]
end
移行の書き込み
t.integer :status
レール3および4.0
私の意見では、最善の解決策は simple_enum gemです。
Rails 3 Migrationでは、次のことができます。
class CreateFoo < ActiveRecord::Migration
def change
create_table :foo do |t|
t.column :foobar, "ENUM('foo', 'bar')"
end
end
end
これにより、単一列「foobar」と値を持つテーブルが作成されます。
列挙列は次のように記述できます。
t.column 'role', 'user_role'
私は列挙型を作成しました:
execute "CREATE TYPE user_role AS ENUM ('consultant', 'admin');"
データベースの検査:
Column | Type | Modifiers | Storage | Stats target | Description
---------------+------------------------+-----------+----------+--------------+-------------
role | user_role | | plain | |
私はenumerated_attributegemが好きです: https://github.com/jeffp/enumerated_attribute
モデル、オブジェクト、ビューの簡単な列挙。
Rails 3.1で正常に動作します
何かのようなもの
class User < ActiveRecord::Base
validates_inclusion_of :status, :in => [:active, :inactive]
def status
read_attribute(:status).to_sym
end
def status= (value)
write_attribute(:status, value.to_s)
end
end
これも機能します。..
add_column :table_name, :column_name, "enum('abc','def','ghi')", :default => 'abc'
Enum_fu gemを使用します: https://github.com/ikspres/enum_f
私のために働いたのは、シンボルから整数にマッピングすることでした
TYPE_MAP = { type_one: 1, type_two:2, another_type:3 }
def type
TYPE_MAP.key(read_attribute(:type))
end
def type=(s)
write_attribute(:type, TYPE_MAP[s])
end
ただし、コントローラーの場合は、次のように再度マップする必要があります。
def create
@cupon_type = CuponType.new(params[:cupon_type])
@cupon_type.type = params[:cupon_type][:type].to_sym
。to_symがオブジェクトの最初の作成をオーバーライドすることに注意してください(私の場合はクーポンです)。
これで、次のように使用できます。
c.type == :type_one
c.type = :type_two
Enum_columnを使用して、enumサポートをアクティブレコードに追加します
active_enum をご覧ください。
あなたのニーズに合っていると思います。