Ruby on Rails: обратный просмотр списка значений массива - PullRequest
4 голосов
/ 16 августа 2011

У меня есть модель с возможностью выбора пользователем, которая настроена в массиве модели.

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 и ruby ​​1.9.2)

Ответы [ 2 ]

4 голосов
/ 16 августа 2011

Вы ищете Массив # rassoc

Pie.display_customeor_choice.rassoc("@pie_flavor")
0 голосов
/ 16 августа 2011

Вот как вы могли бы это сделать:

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), но всегда перезагружается в режиме разработки, делая егоВам проще изменить и увидеть изменения.

...