Формат даты в Heroku - PullRequest
       8

Формат даты в Heroku

1 голос
/ 05 сентября 2011

Я абсолютный новичок с Rails и Heroku.Я создал приложение с базовым CRUD, которое развернуло в Heroku.Определенная сущность имеет свойство date.Когда я создаю или обновляю это значение:

09/04/2011

Сохраняется как:

04/09/2011

Запуск локально (с SQLite) Я не вижу такого поведения.Я подумал, нужно ли мне быть более ясным в отношении культуры, поэтому я изменил config / locales / en.yml следующим образом:

en:
  hello: "Hello world"  
  date:
    formats:
      default: "%m/%d/%Y"

Это, похоже, не имеет никакого влияния.Идеи?

ОБНОВЛЕНИЕ: Вот действие контроллера:

def create
    @entry = Entry.new(params[:entry])

    respond_to do |format|
      if @entry.save
        format.html { redirect_to entries_path }
        format.xml  { render :xml => @entry, :status => :created, :location => @entry }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @entry.errors, :status => :unprocessable_entity }
      end
    end
  end

Вот представление:

<%= f.text_field :date, :value => (@entry.date.blank? ? '' : @entry.date.strftime('%m/%d/%Y')), :class => 'date' %>

Вот модель:

class Entry < ActiveRecord::Base
end

Ответы [ 2 ]

2 голосов
/ 05 сентября 2011

Файл locales определяет только то, как отображается дата, когда она выводится на страницу, а не то, как ее хранит БД. БД знает, как хранить даты, которые ему переданы, используете ли вы date_select, чтобы позволить пользователю выбрать дату, или вы используете текстовое поле?

1 голос
/ 05 сентября 2011

В зависимости от того, какую версию ruby ​​вы используете в Heroku, это может быть связано с тем, что Date.parse предполагает формат ЕС (я думаю, это началось в 1.9:)

> Date.strptime("09/04/2011", "%m/%d/%y")
=> Fri, 04 Sep 2020

Я бы проверил,Если вы используете эту же версию ruby ​​для локальной разработки, в этом случае вы можете переопределить установщик в вашем атрибуте:

class Entry < ActiveRecord::Base
  def date=(v)
    if v.kind_of?(String)
      self.write_attribute(:date, Date.strptime(v.to_s, "%m/%d/%y"))
    else
      super
    end
  end
end
...