【问题标题】:Ruby on Rails: reverse lookup of array list of valuesRuby on Rails:反向查找值的数组列表
【发布时间】:2011-10-28 06:28:52
【问题描述】:

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

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)

【问题讨论】:

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


    【解决方案1】:

    你可以这样做:

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

    【讨论】:

    • 这也是一个好主意,比我有更好的解决方法。
    【解决方案2】:

    您正在寻找Array#rassoc

    Pie.display_customeor_choice.rassoc("@pie_flavor")
    

    【讨论】:

    • 谢谢,这正是我一直在寻找的,但不知何故被忽视了。
    猜你喜欢
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多