【问题标题】:Symbols with various characters各种字符的符号
【发布时间】:2017-08-22 09:51:21
【问题描述】:

我想把如下字符串变成符号:

  • 'Architects & Engineers'
  • 'Catering & Hotels'

他们有'&''/'等字符。

我怎样才能做到这一点?

【问题讨论】:

  • 我很少在 Rails 中使用枚举,但我会使用:architects_and_engineers 作为枚举(理想情况下甚至更短)并通过I18n 生成适合下拉列表的值,因此生成的 HTML 看起来喜欢<option value="architects_and_engineers">Architects & Engineers</option>

标签: ruby symbols


【解决方案1】:
'Architects & Engineers'.to_sym == :'Architects & Engineers'
#⇒ true

['Architects & Engineers'.to_sym, :'Architects & Engineers'].map(&:to_s)
#⇒ ["Architects & Engineers", "Architects & Engineers"]

【讨论】:

    【解决方案2】:

    你可以使用classy_enum gem https://github.com/AgilionApps/classy_enum

    class YourEnum < ClassyEnum::Base
    end
    
    class YourEnum::ArchitectAndEngineer < YourEnum
      def to_s
        "Architects & Engineers"
      end
    end
    
    class YourEnum::DocterOrEngineer < YourEnum
      def to_s
        "Doctor/Engineer"
      end
    end
    

    那么你可以像这样使用它

    YourEnum.map(&:to_s) # ["Architects & Engineers", "Doctor/Engineer"]
    

    你可以找到像这样的枚举

    YourEnum.find("Architects & Engineers") #<YourEnum::ArchitectAndEngineer:0x007f96ccb16628>
    

    【讨论】:

      【解决方案3】:

      另一种方式:

      :"Architects & Engineers"     # => :"Architects & Engineers"
      :"Architects & Engineers" == "Architects & Engineers".to_sym # => true
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-05
        • 1970-01-01
        • 2011-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-02
        相关资源
        最近更新 更多