рельсы i18n - как обрабатывать случай, когда передается нулевая дата, т.е. l (nil) - PullRequest
14 голосов
/ 27 февраля 2012

Я работаю с большим количеством устаревших данных, и иногда поле даты и времени равно nil / null.Это нарушает локализацию.Есть ли рекомендуемый способ исправить это, кроме этого:

dt = nil
l(dt) unless dt.nil?

Ответы [ 3 ]

21 голосов
/ 17 мая 2013

Я думаю, что есть более чистый способ исправить это. Я обезьяна пропатчил I18n в инициализаторе под названием 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
14 голосов
/ 16 мая 2012

Чтобы расширить ответ Ларри К,

Помощник должен включать хеш для передачи параметров в I18n.

def ldate(dt, hash = {})
  dt ? l(dt, hash) : nil
end

Это позволяет вам передавать параметры, подобные этому:

= ldate @term.end_date, format: :short
5 голосов
/ 27 февраля 2012

К сожалению, встроенного решения не существует. См сообщение .

Вы можете определить своего собственного помощника, который предоставляет "ноль" понятное человеку значение. Например:

def ldate(dt)
  dt ? l(dt) : t("[???]")
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...