ruby-on-rails - パラメータ - rails5 enum string



Rails 3のPostgresデータベースでenumを使用するには? (2)

.rbファイルではなく、生のSQLを使用するようにスキーマを設定することもできます。 データベースのより高度な機能(列挙型、全文検索、トリガ、関数など)を単に汎用データストアとして使用するのではなく、これを使用すると、人生がより楽になります。

config / application.rbにこの行を設定するだけです

# Use SQL for the schema due to many database specific settings
config.active_record.schema_format = :sql

その問題を解決するstructure.sqlファイルを出力します。

PostgreSQLには、データベースに組み込まれた列挙型の概念があります。

Rails 3で列挙型を使用する列を持つ表をどのように実装しますか? あなたは何とかPostgreSQLでenumを定義する必要がありますか? これを行うDB移行をどのように作成できますか?

Rails 3.07、Ruby 1.92p180、PostgreSQL 8.3で作業しています。


Answer #1

上記の回答に加えて、Rails 4(と3.2でも可能)では、 "無効なOID"タイプの警告を避けるためにこれを行うことができます:

ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::OID.alias_type 'my_enum_type', 'text'

クエリを実行するときに、文字列を型に変換することもできます。

scope :my_enum_value_is, ->(value){ 
  where('my_enum_value = ?::my_enum_type', value) 
}

また、列パーサにパッチを適用することもできます。

class ActiveRecord::ConnectionAdapters::Column
  private
  def simplified_type_with_my_enum_type(field_type)
    if field_type == 'my_enum_type'
      field_type.to_sym
    else
      simplified_type_without_my_enum_type(field_type)
    end
  end
  alias_method_chain :simplified_type, :my_enum_type
end




database-migration