私は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#テンプレートが作成されていません。レンダリングヘッド:no_content 54ms(ActiveRecord:0.2ms)のコンテンツがありません。 –
これは、Railsが何をレンダリングするのか分からないためです。終わり。 'redirect_to root_path'のようなものを、レコードが正常に保存された場合は、コントローラのcreateメソッドの最後の行に追加してください。繰り返しますが、このエラーメッセージとコントローラコードを含むように質問を編集する人が多くなります。 –