Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 创建带有重音的Ruby符号是一种不好的做法吗?_Ruby On Rails_Ruby_Encoding_Enums - Fatal编程技术网

Ruby on rails 创建带有重音的Ruby符号是一种不好的做法吗?

Ruby on rails 创建带有重音的Ruby符号是一种不好的做法吗?,ruby-on-rails,ruby,encoding,enums,Ruby On Rails,Ruby,Encoding,Enums,创建带有如下重音的ruby符号有什么缺点吗: enum tipo: [:fogo, :água] 单词água带有重音。当使用.humanize将此枚举转换为字符串时,我得到Água而不是Agua(葡萄牙语中这是错误的) 对这件事有什么想法吗?符号是内部字符串。因此,在理想情况下,永远不应该将外部字符串(由用户提供)转换为符号。因此,符号中的重音符号并没有真正的用途。这可能是一个类似的问题,比如“我应该给我的方法取英文名还是葡萄牙语名?”。但是,如果使用重音符号,则应注意所有源文件都使用相同的

创建带有如下重音的
ruby
符号有什么缺点吗:

enum tipo: [:fogo, :água]
单词
água
带有重音。当使用
.humanize
将此枚举转换为
字符串时,我得到
Água
而不是
Agua
(葡萄牙语中这是错误的)


对这件事有什么想法吗?

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


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

您使用的是哪个ruby/rails版本?当我使用humanize、titleize或capitalize时,我得到的是“água”而不是“Água”或“Agua”。@MikeCampbell实际上,当像
Class.tipos
一样调用enum时,它返回
字符串和
整数的散列(
{fogo=>0,“água=>1}
)。它将符号转换为字符串,这就是
.humanize
方法工作的原因。我刚刚检查了它。是的,humanize是ActiveSupport提供的字符串方法,但它不会导致“Água”“-至少对我来说不是这样。@MikeCampbell我重新设计了这个问题,以表明字符串上使用了
.humanize
,而不是符号。我现在只想知道在符号中使用重音是否有问题。你忽略了我的观点,
personalize
没有大写重音“á”,但没关系。不,在符号中使用重音符号没有问题。