Ruby on Rails:反向查找数组值列表

时间:2011-08-16 17:10:52

标签: ruby-on-rails ruby arrays hash processing-efficiency

我有一个带有用户可选选项的模型,该选项在模型的数组中设置。

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时它都会运行转换吗?这可能是资源密集型的大型数组转换了很多,有没有办法在应用程序启动时创建一次反向哈希,而不是再次? (使用rails 3和ruby 1.9.2)

2 个答案:

答案 0 :(得分:4)

您正在寻找Array#rassoc

Pie.display_customeor_choice.rassoc("@pie_flavor")

答案 1 :(得分: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的其他环境)上加载一次,但总是在开发模式下重新加载,这使您更容易更改并查看更改。