【问题标题】:Is it a bad practice to create a Ruby symbol with accent?创建带有重音符号的 Ruby 符号是一种不好的做法吗?
【发布时间】:2015-09-23 23:36:08
【问题描述】:

用这样的重音创建ruby symbol 有什么缺点吗:

enum tipo: [:fogo, :água]

água 这个词有重音。当这个枚举在表单中被翻译成string时,通过使用.humanize我得到Água而不是Agua(这在葡萄牙语中是错误的)。

对这个问题有什么想法吗?

【问题讨论】:

  • 您使用的是哪个 ruby​​/rails 版本?当我使用humanize、titleize 或capitalize 时,我得到的是“água”而不是“Água”或“Agua”。
  • @MikeCampbell 实际上,当像Class.tipos 一样调用枚举时,会返回StringsIntegers ({"fogo => 0, "água" => 1}) 的哈希值。它将符号转换为字符串,这就是.humanize 方法起作用的原因。我刚刚检查过了。
  • 是的,humanize 是 ActiveSupport 提供的一个字符串方法,但它不会产生“Água”——至少对我来说不是。
  • @MikeCampbell 我重新表述了问题以表明.humanize 用于字符串,而不是符号。我现在只需要知道在符号中使用重音是否有问题。
  • 您有点忽略了我的观点,即humanize 没有将带重音的“á”大写,但没关系。不,在符号中使用重音符号没有问题。

标签: ruby-on-rails ruby encoding enums


【解决方案1】:

符号是内部字符串。因此,在理想世界中,永远不应该将外部字符串(由用户提供)转换为符号。因此,符号中的重音没有真正的用途。这可能是一个类似的问题,例如“我应该给我的方法提供英文名称还是葡萄牙名称”。但是,如果您使用重音符号,则应注意所有源文件都使用相同的(希望是 utf-8)编码。否则,您将在从具有不同编码的源文件中访问符号时遇到问题。 所以我的建议是:只使用 ASCII 字符作为符号,就像你通常对方法名称所做的那样。

Rails “打破这条规则”并将符号转换为表单中的字符串的行为只是 Rails 约定优于配置的一部分。我只会自己编写表单(或使用 rails 本地化方法),而不是在符号中使用重音符号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 2016-11-25
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 2014-08-24
    • 2013-04-13
    相关资源
    最近更新 更多