3

Rails はENUM型を提供していませんが、5 つの値しか受け入れられないデータ メンバーが必要です。さらに、Rails Forms Helper と自動的に統合したい: select_tag.
私の状況の正しい解決策は何ですか?

PS、組み込みの適切なソリューションが存在する場合は、外部プラグインを使用したくありません。

4

4 に答える 4

4

このような機能は、できるだけ使用される場所の近くに置いています。

値が単一のモデルで使用される場合は、それらをモデルに保持してください。たとえば、ユーザーが特定の可能なタイプを持ち、それらのタイプのみを持っている場合、次のようになります。

class User < ActiveRecord::Base
  TYPES = %w{guest, paid, admin}

  # Plus validation on the `type` field.
  # Maybe plus a setter override that also validates.
end

選択で許容される値など、他の場所でこれらの型を参照する必要がある場合:

User::TYPES

これに関しては、デコレーターを提供して「人間が読める」ようにする (大文字にする、間隔を空けるなど) ことや、次のようなことを可能にするメタプログラミング メソッドを提供することなど、多くの重要な調整があります。

user.is_guest?   # Or...
user.make_guest! # Or...
user.guest!

私はこの機能のために独自の小さな gem を使用しています。これは、本格的な関連付けが多すぎて価値がないことがよくあるためです。次のようなことができます。

class User < ActiveRecord::Base
  simple_enum :user_type, %w{guest, paid, admin}
end
于 2013-05-18T14:54:28.627 に答える
1

Rails 4.1 には列挙型があります。ベータ版にアップグレードしたところ、魅力的に機能しています。

http://edgeapi.rubyonrails.org/classes/ActiveRecord/Enum.html

私は active_enum gem を試しました。これは素晴らしいですが、Rails 4 とは互換性がありません。Paulo のソリューションはかなりうまく機能し、必要に応じて enum を懸念事項に抽出することもできますが、私にとっては重くなり始めたので、むしろアップグレードしました!

于 2014-01-18T17:42:30.940 に答える
0

Enum を ApplicationHelper のヘルパーとして簡単に定義できます

class ApplicationHelper
  def select_range
    %w{"a", "b", "c", "d", "e"}
  end
end

その後、ビューでselect_range自由に呼び出すことができます。

于 2013-05-18T14:21:11.370 に答える