2

Railsは初めてなので、ここで何が最善のアプローチなのかわかりません。データベースでカスタム型として使用できる単純な C++ スタイルの列挙型を定義したいと考えています。列挙型は配列またはカスタム モジュールでシミュレートできますが、それをテーブルのカスタム型に変換するにはどうすればよいですか?

4

3 に答える 3

6

私がレールで従うパターンは次のとおりです。

私のモデル クラスでmoduleは、列の可能な値を保持するために を追加します。次に、それらを配列に入れ、可能な値の配列に対する検証を定義します。

statusと呼ばれる列/属性があり、それが 3 つの可能な値であると想像してください。私はこれをします:

class MyModel < ActiveRecord::Base

  # This validates that status can't be null
  validates :status, :presence => true  

  # Define a module with all possible values
  module Status
    IN_DEVELOPMENT = 'in development'
    DISABLED = 'disabled'
    ACTIVE  = 'active'
  end

  # Now create an array of possible status values, and add a validation
  STATUSES = [ Status::DISABLED, Status::ACTIVE, Status::IN_DEVELOPMENT]
  validates :status, :inclusion => { :in => STATUSES, :message => "%{value} is not a valid status value" }

end
于 2012-06-01T20:38:46.497 に答える
1

データベースに組み込まれている列挙サポートを使用することを検討しましたか?Postgres( http://www.postgresql.org/docs/9.1/static/datatype-enum.htmlを参照)やMySQL(http://dev.mysql.com/docを参照)など、多くの一般的なRDMBSが列挙型をサポートしています。 /refman/5.5/en/enum.html)。これにより、データストアに型を直接作成し、ActiveRecordプラグインの1つ(Postgresのenum_type:https ://github.com/riscfuture/enum_typeなど)を介して使用できます。

または、active_enumのようなものを使用して、説明したように列挙を構造化し、フィールドを整数としてデータベースに格納することもできます。

于 2012-06-01T00:28:06.993 に答える
1

コードでこの列挙型をどのように利用するかによって、特定の値のみが確実に設定されるように、スコープをデータベースの列挙型とほぼ同じように使用できることがわかりました。

例:

scope :trial, :conditions => { :utype => 'TRIAL' }
scope :registered, :conditions => { :utype => 'REGISTERED' }
scope :active, :conditions => { :status => 'ACTIVE' }
scope :abuse, :conditions => { :status => 'ABUSE' }
于 2012-06-01T21:06:28.250 に答える