rails: установить столбец datetime, используя значение в текстовом поле - PullRequest
1 голос
/ 22 июля 2011

Мой вопрос похож на еще один о размещении данных из текстового поля в столбце datetime.Похоже, что мне нужно поместить данные в text_field в определенном порядке, иначе рельсы не примут это.Дело в том, что я не всегда могу контролировать, как пользователь будет вводить данные.Фактически, поскольку я только что добавил указатель даты JQuery, значение, которое вводит пользователь, почти всегда будет неправильным.

Я подумал, что мог бы использовать Date.parse или Time.parse или DateTime.parse вместе с методом установки(упомянуто в railscast 32 , но, похоже, это тоже не работает для меня. Я продолжаю получать аргумент из-за ошибки диапазона, что также, по-видимому, связано с неправильным форматом ввода.*

Кто-нибудь еще использует JQuery datepicker для заполнения текстового поля для даты? Какую магию вы должны добавить к своей модели или контроллеру, чтобы она работала? Почему это так сложно?

Ответы [ 4 ]

0 голосов
/ 20 февраля 2014

Проблема в том, что rails / activerecord ожидают, что дата будет в формате ISO 'гггг-мм-дд'.Но это не удобный для пользователя формат

Самое простое, на мой взгляд, решение - использовать атрибут alt на датчике. По сути, показать формат даты, но отправить другой формат даты:

  = f.text_field :your_date, id: "your_date", class: "hidden" // This is hidden
  // This will show up
  = text_field_tag "date[something_we_will_not_use]", f.object.your_date.strftime("%m/%d/%Y"),
    class: "datepicker", 'data-alt-field' => '#your_date'

Инициализация Datepicker

$('.datepicker').each(function() {

      var alt_field = $(this).attr('data-alt-field');

      $this.datepicker({
        dateFormat: "mm/dd/yy",
        prevText: '<i class="fa fa-chevron-left"></i>',
        nextText: '<i class="fa fa-chevron-right"></i>',
        altField: alt_field, // This is the tag where the date will be filled
        altFormat: "yy/mm/dd" // This is how the date will be posted to your controller
      });
    })
0 голосов
/ 22 июля 2011

Я использовал своевременность драгоценный камень, чтобы преодолеть эту проблему и представить дату в нужном мне формате.Наряду со своевременностью я также использовал validates_timeliness , чтобы проверить дату и время, то есть это не в будущем или что-либо в этом роде.

Для анализа строки 'MM / DD / YYYY' с использованием гема своевременностивы бы сделали:

Timeliness.parse(params[:my_date], :format => 'mm/dd/yyyy')
0 голосов
/ 22 июля 2011

Что если вы переключите поля месяца и дня перед сохранением вашего объекта? Вы можете сделать что-либо с помощью jquery / javascript или просто использовать date_select_tag и перемещать параметры, как считаете нужным, в контроллере перед сохранением объекта.

Кроме этого, может быть установка по умолчанию для формата даты для рельсов. Не уверен, если вы хотите пойти так далеко, чтобы изменить формат даты для всего приложения.

0 голосов
/ 22 июля 2011

Анализаторы времени и даты, в то время как они принимают широкий спектр форматов, не могут определить любой период времени, который вы проходите, несмотря ни на что.Если вы вышли из диапазона ошибок, это означает, что используемый вами формат был недопустимым.

Вы можете контролировать формат, используемый jQuery Datepicker , и выбрать тот, в котором анализатор времени не будет выдавать ошибку,ММ / ДД / ГГГГ по умолчанию должны работать хорошо, подумал, какой формат вы передаете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...