Rails NoMethodError при преобразовании строк в дату из отправленной формы

Рельсы 4.0.3. У меня есть форма с полем даты. Другими словами, это работает только тогда, когда я просто использую date_select. это отлично работает на моей машине разработчика. Когда я запускаю его в производство, форма отказывается отправляться и выдает NoMethodError по достижении даты, жалуясь на отсутствие метода utc. Я не могу отследить это, потому что журнал производственного сервера никогда не сообщает мне больше, чем строку, в которой происходит сбой, но эта строка является строкой Model.new(params[:form]), а сбой происходит во время магии преобразования типа.

Поле в настоящее время является текстовым полем со значением, предоставленным средством выбора даты пользовательского интерфейса jQuery, но эта проблема существует и тогда, когда это простое поле date_field для формы Rails. Как только он доходит до даты, он терпит неудачу... но он отлично работает в разработке, и я развертываю производство с помощью Git, поэтому я знаю, что мы на одной странице.

Локально я работаю в jRuby и использую Neo4j.rb 2.3 в качестве своей БД. Я имитировал среду разработки, запустив рабочий сервер приложений, Torquebox, и он по-прежнему локальный, но не удаленный. Я использую одну и ту же версию jRuby в обоих местах, и все мои драгоценные камни привязаны к определенным версиям, чтобы исключить какую-то странную ошибку, связанную с версией. Любые мысли очень ценятся!


person subvertallchris    schedule 20.04.2014    source источник


Ответы (2)


Попробуйте этот код и посмотрите, работает ли он: -

date_string = "#{review_params['date(1i)']}-#{review_params['date(2i)']}-#{review_params['date(3i)']}"
@concert = Concert.find_or_create_by!(artist: review_params[:artist], venue: review_params[:venue], date: date_string)
person Catmandu    schedule 20.04.2014

Я понял решение, КАК МОЖНО щелкнуть кнопку отправки, но хотел задокументировать это на случай, если у кого-то еще возникнет эта проблема. На самом деле это ошибка в геме neo4j-wrapper... который два месяца назад объединил запрос на вытягивание... который я написал. И я забыл об этом. Думаю, в моем локальном наборе драгоценных камней все еще была кэширована моя модифицированная версия драгоценного камня, но сервер просто использовал последнюю версию, которая была сделана до того, как моя модификация была введена.

Эта ошибка находится в type_converters.rb. Neo4j сохраняет все время и даты в БД как целые числа, поэтому ему необходимо преобразовать все отправленное. Исходный код проверял тип объекта для преобразования. Если это была дата, она преобразовывала ее во время, а затем запускала utc; в противном случае он просто запускал utc. Очевидно, что это не годится для строк, поэтому мое исправление сначала запустило Time.parse(s).

Итак, если у кого-то еще есть эта проблема и он использует Neo4j.rb 2.3, добавьте эту строку в свой gemfile.

gem 'neo4j-wrapper', git: 'https://github.com/andreasronge/neo4j-wrapper', ref: '00e5665ead'
person subvertallchris    schedule 20.04.2014