8

私は現在、列挙型文字列を含む列を表すためにルックアップテーブルを使用しています(または使用しようとしています)。私はこれが私たちが行きたい方向であることを確認するために私のチームと広範な議論をし、それを追求することを決定しましたが、残念ながら、移行を使用してルックアップテーブルを列に結び付ける方法と変更があるかどうかを知っている人は誰もいませんこの新しい動作をサポートするために、モデル/コントローラー/ビューで作成されます。

私はこれを広範囲にグーグルで検索しましたが、これを行う良い例を見つけられなかったので、誰かが私の検索で見逃したチュートリアルへの素晴らしいリンクを教えてくれるか、これを行う方法を説明してくれることを願っています。また、これに非公式(または公式)のRailsyパターンがあるかどうかも知りたいです。

前もって感謝します。

4

3 に答える 3

5

別のテーブルを作成せずに列挙/構成をモデル化する軽量の方法を探している場合は、ActiveHashを必ずチェックしてください。

https://github.com/zilkey/active_hash

于 2011-01-28T18:11:11.147 に答える
3

私はあなたと同じ問題に遭遇し、動的ルックアップテーブルをモデルに透過的に追加するgemを作成することで問題を解決しました。私はここでそれについてブログを書きました:http://www.codelord.net/2011/08/09/guest-post-lookup-tables-with-ruby-on-rails/

そしてコードはここにあります:https ://github.com/Nimster/RailsLookup

于 2011-08-10T13:35:17.783 に答える
1

これは古い質問だと思いますが、それでもグーグルでトップヒットなので、宝石としてパッケージ化されたソリューションを共有したいと思いました。https://github.com/blackrat/acts_as_enumerationを ご覧ください

READMEから:

したがって、データベーステーブルに「name」という列がある場合は、次のように宣言します。

Acts_as_enumeration:name

その列のすべてのアイテムを選択し、それらをハッシュで主キー値にマップします。

さらに、インスタンスメソッドis _#{key}を作成します。ここで、keyはその列のすべての値であり、is?(array)およびis_not?(array)は、その配列内の型をチェックします。

列の例としてnameを保持すると、クラスメソッドid_for_nameはそのマッピングの主キー値を返し、valid_name?(value)は、テーブルにその値を持つname列のエントリが含まれているかどうかを示します。

最後に、欠落しているメソッドは、is_paul_or_michael_or_luke?などのメソッドのis_およびis_notチェーンを可能にします。これは(is_paul?|| is_michael?|| is_luke?)またはis?(:paul、:michael、:luke)およびis_not_paul_or_michael_or_likeと同じ効果があり、!(is_paul || is_michael?|| is_luke? )または!is?(:paul、:michael、:luke)

警告:method_missingが使用するメカニズムにより、誰かが実際に「not bruce」という名前を持っていた場合、組み合わせクエリはこれを最初の要素として使用できません。つまり、「ブルースではない」だけでなく、「ではない」。

では、is_not_bruce_or_paulの組み合わせですか?is_paul_or_not_bruceと書く必要がありますか?望ましい効果をもたらすために。is_not_not_bruce_or_paulは問題ありませんが、これが発生する可能性は、モンティパイソンのスケッチの外で実際に「ブルースではない」と呼ばれる人とほぼ同じです。

(これはおそらくそうなることを意味するので、新しいエントリをサポートするようにコードを変更する前に、順序を変更してみてください)

于 2021-04-27T11:18:11.057 に答える