Rails - 如何复句?

Dar*_*use 4 ruby ruby-on-rails pluralize

我知道你可以使用复数特征在Rails中复数一个单词.

pluralize (3, 'cat')
=> 3 cats
Run Code Online (Sandbox Code Playgroud)

但我想要做的是复数一个需要复数多个单词的句子.

There are <%= Cat.count %> cats
Run Code Online (Sandbox Code Playgroud)

问题是,如果只有一只猫.它会回来

There are 1 cats
Run Code Online (Sandbox Code Playgroud)

哪个没有意义.

应该说

There are x cats (if x is not 1)

There is 1 cat (if there is only 1)
Run Code Online (Sandbox Code Playgroud)

问题是,我无法弄清楚如何将其复数化,因为我们在这里有两个参数(是和猫).

任何帮助将不胜感激.

也许是这样的?

if Cat.count == 1
  puts "There is 1 cat"
else
  puts "There are #{Cat.count} cats"
end
Run Code Online (Sandbox Code Playgroud)

DMK*_*MKE 12

您可以通过为翻译键定义计数值来使用库的复数功能I18n(即config/locales/en.yml):

en:
  cats:
    one: 'There is one cat.'
    other: 'There are %{count} cats.'
Run Code Online (Sandbox Code Playgroud)

然后,在您的代码(或视图,或其他任何地方,因为I18n全局可用)

3.times{|i|
  puts I18n.t('cats', count: i)
}
Run Code Online (Sandbox Code Playgroud)

将输出

There are 0 cats.
There is one cat.
There are 2 cats.
Run Code Online (Sandbox Code Playgroud)