我正在使用bootstrap3 datetimepicker
。當用戶選擇一個日期時,它會返回一個字符串。我不知道如何將數據類型更改爲datetime
對象。我認爲歸檔此任務的最佳方式是使用回調before_save
。當我執行我的方法時,我得到以下錯誤。RoR DateTimePicker將字符串轉換爲DateTime對象
Processing by EventsController#create as HTML
Parameters: {"utf8"=>"✓","authenticity_token"=>"FSSSA==",
"event"=>{"name"=>"Omaha", "location"=>"Omaha", "date_time"=>"05/24/2017 9:04 PM"},
"commit"=>"Save"}
(0.1ms) BEGIN
(0.1ms) ROLLBACK
No template found for EventsController#create, rendering head :no_content
Completed 204 No Content in 54ms (ActiveRecord: 0.2ms)
Event.rb
class Event < ApplicationRecord
validates :name, :date_time, :location, presence: true
before_save :parse_date_time
private
def parse_date_time
self.date_time = DateTime.strptime(date_time, "%m/%d/%Y %l:%M %p")
end
end
事件視圖:
= form_for event do |f|
.form-group
= f.label :name, 'Event Name:'
.text
= f.text_field :name, class: 'form-control', placeholder: 'Add Your Event Name Here'
.form-group
= f.label :location
.text
= f.text_field :location, class: 'form-control', placeholder: 'Location or Venue Name'
.form-group
= f.label :date_time
.text
= f.text_field :date_time, class: 'form-control', id: 'datetimepicker', placeholder: 'Date and Event Start Time'
= f.submit '保存'
控制器
class EventsController < ApplicationController
def index
@events = Event.all
end
def new
@event = Event.new
end
def create
@event = Event.new(event_params)
if @event.save
redirect_to @events
end
end
private
def event_params
params.require(:event).permit(:name, :location, :date_time)
end
end
我的最終目標是在每次創建或更新新事件時將string
轉換爲datetime
對象。任何指導將不勝感激。
我剛剛用你給出的例子測試了你的代碼 - 它工作得很好。所以請提供更多關於什麼不起作用的信息。 –
當我嘗試保存表單時出現以下錯誤。 '0.1ms)BEGIN (0.1ms)ROLLBACK 未找到爲EventsController創建的模板#create,rendering head:no_content 已完成204 54ms內沒有內容(ActiveRecord:0.2ms)' –
這是因爲Rails不知道要渲染什麼結束。如果記錄被成功保存,則添加類似'redirect_to root_path'的東西,作爲控制器的最後一行創建方法。再次,它會幫助你很多人編輯你的問題,包括這個錯誤信息和控制器代碼。 –