ActiveSupport提供了很好的方法to_sentence
。因此,
require 'active_support'
[1,2,3].to_sentence # gives "1, 2, and 3"
[1,2,3].to_sentence(:last_word_connector => ' and ') # gives "1, 2 and 3"
你可以更改最后一个单词连接符,这是好的,因为我不想使用额外的逗号。但它需要额外的文字:44个字符而不是11个字符!
问题:将:last_word_connector
的默认值更改为' and '
的最类似红宝石的方式是什么?
答案 0 :(得分:12)
嗯,它是可本地化的,因此support.array.last_word_connector
见:
来自:conversion.rb
def to_sentence(options = {})
...
default_last_word_connector = I18n.translate(:'support.array.last_word_connector', :locale => options[:locale])
...
end
首先,创建一个rails项目
rails i18n
接下来,编辑您的en.yml文件:vim config / locales / en.yml
en: support: array: last_word_connector: " and "
最后,它有效:
Loading development environment (Rails 2.3.3) >> [1,2,3].to_sentence => "1, 2 and 3"
答案 1 :(得分:-1)
class Array
alias_method :old_to_sentence, :to_sentence
def to_sentence(args={})
a = {:last_word_connector => ' and '}
a.update(args) if args
old_to_sentence(a)
end
end
答案 2 :(得分:-1)
作为如何覆盖一般方法的答案,帖子here提供了一种很好的方法。它没有与别名技术相同的问题,因为没有剩余的“旧”方法。
这里你可以如何将这种技术用于原始问题(用ruby 1.9测试)
class Array
old_to_sentence = instance_method(:to_sentence)
define_method(:to_sentence) { |options = {}|
options[:last_word_connector] ||= " and "
old_to_sentence.bind(self).call(options)
}
end
如果上述代码令人困惑,您可能还需要在UnboundMethod上阅读。请注意,old_to_sentence在结束语句之后超出范围,因此对于将来使用Array不是问题。