Ruby on rails RubyonRails是/是多元化的
有没有一个助手可以避免这种代码Ruby on rails RubyonRails是/是多元化的,ruby-on-rails,Ruby On Rails,有没有一个助手可以避免这种代码 = @leads.length == 1 ? 'is' : 'are' 我知道多元化,但在这种情况下没有帮助。我知道编写一个助手是件小事,我想知道Rails API中是否有我忽略的东西 谢谢 -蒂姆也许你可以使用复数并为“is”添加一个词形变化 Inflector.inflections do |inflection| inflection.irregular "is", "are" end 所以 'is'.pluralize # => 'are'
= @leads.length == 1 ? 'is' : 'are'
我知道多元化,但在这种情况下没有帮助。我知道编写一个助手是件小事,我想知道Rails API中是否有我忽略的东西
谢谢
-蒂姆也许你可以使用复数并为“is”添加一个词形变化
Inflector.inflections do |inflection|
inflection.irregular "is", "are"
end
所以
'is'.pluralize # => 'are'
(我没有测试这个解决方案,但它应该可以工作。)另一个选择是使用rails附带的i18n翻译库 这允许您使用单数和复数版本定义单词或句子(带插入) 尽管这似乎过于复杂,但我强烈建议从一开始就在每个项目中使用i18n,因为它不仅是活动记录错误的逻辑所在,而且使您的应用程序可以很容易地用另一种语言部署 它还提供了许多额外的插件和日期和时间本地化的好处。阅读关于i18n由内而外的内容如前所述,您需要将is/are添加到Rails拐点。只需td6中的代码,但您需要添加ActiveSupport命名空间:
ActiveSupport::Inflector.inflections do |inflection|
inflection.irregular "is", "are"
end
现在,Rails内置的helper是多元化的,但是在一个视图中,它不能满足您的需要。
例如:
pluralize(@leads.length,'is')
输出(用于2个引线)
对于你想要的,你需要做你自己的助手,将单词复数,但不输出计数。因此,如果您基于当前的rails多元化:
def pluralize_no_count(count, singular, plural = nil)
((count == 1 || count == '1') ? singular : (plural || singular.pluralize))
end
最后,我将选择:
配置
轨道3
轨道2
我认为不存在这样的帮助器,但如果你最终编写了自己的帮助器,你应该看看ActionView::Helpers::TextHelper#pluralize以获得灵感。请注意,不再需要创建自定义帮助器
pluralize
将采用一个参数,如中的“is”。pluralize(@leads.length)
这是一种非常奇怪的方式,但是谢谢
def pluralize_no_count(count, singular, plural = nil)
((count == 1 || count == '1') ? singular : (plural || singular.pluralize))
end
# 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!"