2013-06-24 3 views
0

Я делаю приложение для планирования своего небольшого фотобизнеса. Я использую аддон JQuery TimePicker от Trent Richardson (который расширяет выбор даты jQueryUI): https://github.com/trentrichardson/jQuery-Timepicker-Addon, потому что время является важной частью планирования назначения.условные операторы в SimpleForm

Чтобы редактировать существующую запись, я должен предоставить STRFTIME форматирования для поля ввода текста, который привязан к виджету JQuery (в противном случае время часть не будет по умолчанию предварительно существующего контента).

Следующие отлично подходит для создания новой записи работ:

<%= f.input :starts_at, :as => :string %> 

следующие работы отлично подходит для редактирования существующей записи. К сожалению, приложение рельсы взрывает, когда я пытаюсь создать новую запись (которая не имеет уже существующий «starts_at» содержание):

<%= f.input :starts_at, :as => :string, :input_html => { :value => localize(f.object.starts_at, :format => "%m-%d-%Y %I:%M %P") } %> 

Я не могу за жизнь мне понять, как для тестирования (в форме) для ранее существовавшего содержимого в этом поле и, тем самым, для форматирования или нет. Я был бы так благодарен за любые предложения.

Стив

ответ

1

Я осторожный оптимизм. Это, кажется, работает (без необходимости пользовательского типа ввода) для моей ситуации:

<% if @assignment.new_record? %> 
    <%= f.input :starts_at, :as => :string %> 
    <% else %> 
    <%= f.input :starts_at, :as => :string, :input_html => { :value => localize(f.object.starts_at, :format => "%Y-%m-%d %I:%M %P") } %> 
<% end %> 

Опять же, с этим в assignments.js.coffee (потому что он должен соответствовать для плагин JQuery для работы) :

dateFormat: 'yy-mm-dd', 
timeFormat: 'hh:mm tt' 

Я пытался поставить условие инлайн с f.input заявление, которое не удалось, а затем я попытался тестирования для значения в: starts_at поле, которое также не удалось. Тестирование того, является ли это новой записью или нет, похоже, работает. Для моей ситуации так или иначе.

0

Тип поля, вероятно, DateTime, а это значит, что вам нужно разобрать строку заранее. Вы можете сделать это с помощью присваивателя или before_validation фильтра, например:

def starts_at=(datetime) 
    begin 
    write_attribute(:starts_at, DateTime.strptime(datetime, "%m-%d-%Y %I:%M %P")) 
    rescue ArgumentError 
    end 
end 

def starts_at 
    begin 
    self[:starts_at].strftime("%m-%d-%Y %I:%M %P") 
    rescue NoMethodError 
    end 
end 

http://ruby-doc.org/stdlib-2.0/libdoc/date/rdoc/DateTime.html#method-c-parse

+0

Мэтью, спасибо за ваше время. Возможно, я написал этот вопрос неловко. Когда ** ** есть строка в этом поле (это означает, что я редактирую ранее существующую запись), я могу проанализировать ее и передать ее в аддон jQuery в форме, которую может принять javascript. Проблема, с которой я сталкиваюсь, - это когда я создаю ** новую ** запись. Rails генерирует ошибку, когда пытается проанализировать пустое поле ввода текста. Поэтому мне нужно выяснить, как попросить его проанализировать данные datetime только в том случае, если ** это ** данные datetime в этом поле ввода. Возможно, ваш ответ указал на это, и я просто не был достаточно ярким, чтобы забрать его. – user209835

+0

@ user209835 Вы можете просто спасти ошибку, возникающую при попытке проанализировать дату, обновить ответ. – MatthewFord

+0

Или добавить блок if для пропуска, если значение пустое? – MatthewFord