我正在处理大量遗留数据,偶尔datetime字段为nil / null。这打破了本地化。是否有建议的方法来解决这个问题:
dt = nil
l(dt) unless dt.nil?
答案 0 :(得分:21)
我认为有一种更清洁的方法来解决这个问题。我在名为relaxed_i18n.rb
这是该文件的内容:
module I18n
class << self
alias_method :original_localize, :localize
def localize object, options = {}
object.present? ? original_localize(object, options) : ''
end
end
end
这是我用来验证此方法输出的RSpec代码:
require 'spec_helper'
describe 'I18n' do
it "doesn't crash and burn on nil" do
I18n.localize(nil).should == ''
end
it 'returns a date with Dutch formatting' do
date = Date.new(2013, 5, 17)
I18n.localize(date, format: '%d-%m-%Y').should == '17-05-2013'
end
end
答案 1 :(得分:14)
延长Larry K的答案,
帮助程序应包含一个哈希,以将选项传递给I18n。
def ldate(dt, hash = {})
dt ? l(dt, hash) : nil
end
这允许您传递这样的选项:
= ldate @term.end_date, format: :short
答案 2 :(得分:5)