web-dev-qa-db-ja.com

Rails 3移行で列挙列をどのように記述しますか?

Rails 3移行で列挙列をどのように記述しますか?

63
Zeck

Rails 4.1 列挙型を含む 今のところ!

あなただけを書くことができます

class User < ActiveRecord::Base
  enum status: [ :admin, :user, :banned ]
end

移行の書き込み

t.integer :status

レール3および4.0

私の意見では、最善の解決策は simple_enum gemです。

68
asiniy

Rails 3 Migrationでは、次のことができます。

class CreateFoo < ActiveRecord::Migration
  def change
    create_table :foo do |t|
      t.column :foobar, "ENUM('foo', 'bar')"
    end
  end
end

これにより、単一列「foobar」と値を持つテーブルが作成されます。

8
amerdidit

列挙列は次のように記述できます。

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    |              |
5
Moriarty

私はenumerated_attributegemが好きです: https://github.com/jeffp/enumerated_attribute

モデル、オブジェクト、ビューの簡単な列挙。

Rails 3.1で正常に動作します

3
user1085302

何かのようなもの

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
3
demas

これも機能します。..

add_column :table_name, :column_name, "enum('abc','def','ghi')", :default => 'abc'

2
bigtex777

Enum_fu gemを使用します: https://github.com/ikspres/enum_f

1
Pasta

私のために働いたのは、シンボルから整数にマッピングすることでした

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
1
DanielZiv

Enum_columnを使用して、enumサポートをアクティブレコードに追加します

https://github.com/mdsol/enum_column

0
Mohsen Alizadeh

active_enum をご覧ください。

あなたのニーズに合っていると思います。

0
pisaruk