4

モデルの配列に設定されたユーザー選択可能なオプションを備えたモデルがあります。

def Pie < ActiveRecored::Base
    def self.sel_options
      [ [ "Apple Blueberry", "AB" ],
        [ "Cranberry Date", "CD" ] ]
    end
end

短い文字列は他の場所から取得されてデータベースに保存されますが、オブジェクトを表示するときに長い文字列を表示したいと思います。たとえば、ビューでの使用:

Pie.display_customeor_choice[@pie_flavor]

逆ハッシュをハードコーディングしたくないのですが、配列を逆マッピングでハッシュに変換するdisplay_optionsメソッドを作成すると、display_optionsが呼び出されるたびに変換が実行されますか?これは、大量に変換される大きな配列ではリソースを大量に消費する可能性があります。アプリの起動時に一度だけ逆ハッシュを作成し、二度と作成しない方法はありますか?(レール3とルビー1.9.2を使用)

4

2 に答える 2

4

Array#rassocを探しています

Pie.display_customeor_choice.rassoc("@pie_flavor")
于 2011-08-16T17:18:16.530 に答える
0

これがあなたがそれをすることができる方法です:

def Pie < ActiveRecored::Base

  def self.sel_options
    [ [ "Apple Blueberry", "AB" ],
      [ "Cranberry Date", "CD" ] ]
  end

  def self.display_customeor_choice
    unless @options
      @options = {}
      sel_options.each { |items| @options[items.last] = items.first }
    end
    @options
  end       

end

これにより、本番環境(またはcache_classesがtrueに設定されている他の環境)で1回だけ読み込まれることが保証されますが、常に開発モードで再読み込みされるため、変更と変更の確認が簡単になります。

于 2011-08-16T17:18:17.973 に答える