code

Rails 3 마이그레이션에서 열거 형 열을 어떻게 설명합니까?

codestyles 2020. 11. 21. 14:05
반응형

Rails 3 마이그레이션에서 열거 형 열을 어떻게 설명합니까?


Rails 3 마이그레이션에서 열거 형 열을 어떻게 설명합니까?


Rails 4.1 에는 현재 enum포함되어 있습니다 !

그냥 쓸 수 있습니다

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

마이그레이션 쓰기

t.integer :status

Rails 3 및 4.0

제 생각에 가장 좋은 해결책은 simple_enum gem입니다.


Rails 3 마이그레이션에서 다음을 수행 할 수 있습니다.

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

같은 것

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

나는 enumerated_attribute gem을 좋아합니다 : https://github.com/jeffp/enumerated_attribute

모델, 개체 및보기를 쉽게 열거 할 수 있습니다.

레일 3.1에서 잘 작동합니다.


이것도 작동합니다 ....

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


enum_fu gem을 사용하겠습니다 : https://github.com/ikspres/enum_fu


나를 위해 일한 것은 기호에서 정수로 매핑하는 것이 었습니다.

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

active_enum을 살펴보십시오 .

나는 그것이 당신의 필요에 맞다고 생각합니다.


enum_column을 사용하여 활성 레코드에 열거 지원 추가

https://github.com/mdsol/enum_column


t.enum :file_type ,:limit => [:jpg, :png, :gif] ,:default => :gif

참고 URL : https://stackoverflow.com/questions/4282710/how-do-i-describe-an-enumeration-column-in-a-rails-3-migration

반응형