Параметры исчезают при использовании Tempus dominus bootstrap4 - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь использовать инструмент выбора времени Tempus Dominus Datetime в моем приложении. Кажется, все работает нормально, но когда я пытаюсь преобразовать отправленную строку в объект datetime в моем контроллере, я получаю TypeError (неявное преобразование nil в String). Я также попытался поместить параметры в журналы, но получил пустую строку. Странно то, что при отправке формы параметры действительно присутствуют.

Обработка EventsController # create as HTML Параметры: {"utf8" => "✓", > "authenticity_token" => "yuP08tdkavDAzcbJImZXeL0EZ1dp6D13dnLyW / lU + frPVej0tiUmavI> 0GKvs66z7 + ca2GynI1WWs2d5aSJX5zA ==, {>>">> ">>">> ">>">> ">>">> ">>">> ">>"> ""> ""> ""> " "21.02.2020 13:26", "end_time" => "28.02.2020> 22:46", "description" => "sasasa"}, "button" => ""}

Вот весь соответствующий код.

Контроллер:

class EventsController < ApplicationController
  def new
    @event = Event.new
  end

  def create 
    @user = current_user
    if @user
      @user.events.create(title: params[:title], game: params[:game], 
                          start_time: time_parse(params[:start_time]), 
                          end_time: time_parse(params[:start_time]),
                          description: params[:description])
    end
  end

  private 
  def event_params
    params.require(:event).permit(:title, :game, :start_time,:end_time, :description)
  end

  def time_parse(time)
    DateTime.strptime(time, '%m/%d/%Y %M:%S %p')
  end
end

Просмотр:

 <div class="col-lg-6">
            <%= form_for @event, url: events_path do |form| %>
              <div class="form-row">
                <div class="col-md-6 form-group">
                  <%= form.text_field :title, class: "form-control", placeholder: "Party Title" %>
                </div>

                <div class="col-md-6 form-group">
                  <%= form.text_field :game, class: "form-control", placeholder: "Game" %>
                </div>
              </div>



              <div class="row">
                <div class='col-md-6'>
                  <div class='form-group'>
                    <%= form.label :start_time, 'Start Date and Time', class: 'control-label' %><br>
                    <div class="input-group date" id="datetimepicker1" data-target-input="nearest">
                      <%= form.text_field(:start_time, 
                        value: form.object.start_time ? form.object.start_time.strftime('%B %d, %Y %I:%M %p') : nil, 
                        class: "form-control datetimepicker-input", data: {target:"#datetimepicker1"}) %>
                      <div class="input-group-append" data-target="#datetimepicker1" data-toggle="datetimepicker">
                        <div class="input-group-text"><i class="fas fa-calendar-plus"></i></div>
                      </div>
                    </div>
                  </div>
                </div>
                <div class='col-md-6'>
                  <div class='form-group'>
                    <%= form.label :end_time, 'End Date and Time', class: 'control-label' %><br>
                    <div class="input-group date" id="datetimepicker2" data-target-input="nearest">
                      <%= form.text_field(:end_time, 
                        value: form.object.end_time ? form.object.end_time.strftime('%B %d, %Y %I:%M %p') : nil, 
                        class: "form-control datetimepicker-input", data: {target:"#datetimepicker2"}) %>
                      <div class="input-group-append" data-target="#datetimepicker2" data-toggle="datetimepicker">
                        <div class="input-group-text"><i class="fas fa-calendar-plus"></i></div>
                      </div>
                    </div>
                  </div>
                </div>
              </div>


              <div class="col-md-6 form-group">
              </div>
                <%= form.text_area :description, class: "form-control", size: "24x6", placeholder: "Describe your meetup"%>
              </div>

              <div class="text-center "><%= form.button "Sign up", class: "sub-but" %></div>
            <% end %>


          </div>

Javascript для просмотра:

$('#datetimepicker1').datetimepicker({
  format: 'MMMM D, YYYY h:mm A',
  stepping: 15,
  minDate: Date(),
  maxDate: new Date(Date.now() + (365 * 24 * 60 * 60 * 1000)),
  sideBySide: true,
  icons: {
    up: 'fas fa-arrow-up',
    down: 'fas fa-arrow-down',
    previous: 'fas fa-chevron-left',
    next: 'fas fa-chevron-right',
    close: 'fas fa-times'
  },
  buttons: {showClose: true }
});

$('#datetimepicker2').datetimepicker({
  format: 'MMMM D, YYYY h:mm A',
  stepping: 15,
  useCurrent: false,
  sideBySide: true,
  icons: {
    up: 'fas fa-arrow-up',
    down: 'fas fa-arrow-down',
    previous: 'fas fa-chevron-left',
    next: 'fas fa-chevron-right',
    close: 'fas fa-times'
  },
  buttons: {showClose: true }
});
$("#datetimepicker1").on("change.datetimepicker", function (e) {
  $('#datetimepicker2').datetimepicker('minDate', e.date);
  console.log(e.date);
});
$("#datetimepicker2").on("change.datetimepicker", function (e) {
  $('#datetimepicker1').datetimepicker('maxDate', e.date);
});

1 Ответ

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

Я думаю, что вы не правильно связываетесь с параметрами, также я заметил, что в вашем коде указан код :start_time, я предполагаю, что это опечатка, поэтому я изменил его в своем ответе. Если это не опечатка, оставьте все как есть.

...
start_time: time_parse(params[:event][:start_time]), 
end_time: time_parse(params[:event][:end_time]),
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...