我有一个带有用户可选选项的模型,该选项在模型的数组中设置。
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)
答案 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的其他环境)上加载一次,但总是在开发模式下重新加载,这使您更容易更改并查看更改。