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

4

2 回答 2

4

您正在寻找数组#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 的其他环境)中加载一次,但总是在开发模式下重新加载,使您更容易更改和查看更改。

于 2011-08-16T17:18:17.973 回答