是否有帮助避免这种代码?
= @leads.length == 1 ? 'is' : 'are'
我知道复数,但在这种情况下没有帮助。我知道编写一个帮助程序是微不足道的,我想知道Rails API中是否存在我忽略的内容。
谢谢,
-Tim
答案 0 :(得分:18)
正如t6d所说,你需要在Rails变换器中添加is / are。只是来自td6的代码,但您需要添加ActiveSupport命名空间:
ActiveSupport::Inflector.inflections do |inflection|
inflection.irregular "is", "are"
end
现在内置的帮助程序Rails是复数形式,但在视图中不会执行您想要的操作。 例如:
pluralize(@leads.length,'is')
输出(2个潜在客户)
2 are
对于你想要的东西,你需要制作你自己的帮助器,它会使单词多元化,但不输出计数。所以如果你把它基于当前的轨道复数:
def pluralize_no_count(count, singular, plural = nil)
((count == 1 || count == '1') ? singular : (plural || singular.pluralize))
end
答案 1 :(得分:2)
也许你可以使用复数并为'is'添加一个变形
Inflector.inflections do |inflection|
inflection.irregular "is", "are"
end
这样
'is'.pluralize # => 'are'
(我没有测试解决方案,但它应该可以工作。)
答案 2 :(得分:2)
# inflections.rb
Inflector.inflections do |inflection|
inflection.irregular "is", "are"
inflection.irregular "has", "have"
end
"#{subject} #{'is'.pluralize(count)} working!"
# application_helper.rb
def signularize_or_pluralize(word, count)
if count.to_i == 1
word.singularize
else
word.pluralize
end
end
# in the view view
"#{subject} #{signularize_or_pluralize('is', count)} working!"
答案 3 :(得分:1)
另一种选择是使用rails附带的i18n翻译库。
这允许您使用单数和复数版本定义单词或句子(带插值)。
虽然看起来似乎过于复杂,但我强烈建议在开始时为每个项目使用i18n,因为它不仅是主动记录错误的合理位置,而且还可以让您的应用程序为另一种语言的部署做好准备。
它还提供了许多额外的插件和日期和时间本地化的好处。从里面here了解i18n