[RUBY] Implementieren Sie ein Reservierungssystem mit Rails und einfachem Kalender! Fügen wir datetime eine Validierung hinzu!

Was Sie implementieren möchten

Verwenden Sie den einfachen Kalender von gem, um Reservierungen im Kalender zu planen Wir gehen davon aus, dass Sie Grundkenntnisse in Ruby und Rails haben

Entwicklungsumgebung

Rails 6.0.3 ruby 2.7.0

Reservierungstabelle hinzufügen

Unter der Annahme, dass wir eine Mini-App erstellen, erstellen wir diesmal eine Reservierungstabelle und fügen Spalten für Name (Zeichenfolge) und Startzeit (Datum / Uhrzeit-Typ) hinzu.

rails new calendar_app

Zunächst einmal sind die üblichen Schienen neu

bundle

Machen wir es uns auch zur Gewohnheit, Bundles zu installieren.

Gemfile


gem 'simple_calendar', '~> 2.0'
bundle

Fügen Sie simple_calendar zu gemfile hinzu und bündeln Sie die Installation erneut

rails g scaffold reservationc name start_time:datetime

Dieses Mal möchte ich die Anwendung einfach über ein Gerüst implementieren.

rails db:migrate

Vergessen Sie nicht die üblichen Schienen db: migrieren.

スクリーンショット 2020-11-02 23.30.30.png

Zugriff auf http: // localhost: 3000 / mit Schienen s! Wenn Sie bestätigen können, dass Sie fest aufstehen

routes.rb


root 'reservations#index'

Lassen Sie uns den Routenpfad zur Reservierungslistenseite ändern. スクリーンショット 2020-11-02 23.33.42.png

Als nächstes bereiten wir die Ansicht von simple_calendar vor.

rails g simple_calendar:views
create  app/views/simple_calendar
      create  app/views/simple_calendar/_calendar.html.erb
      create  app/views/simple_calendar/_month_calendar.html.erb
      create  app/views/simple_calendar/_week_calendar.html.erb

Es wurden drei Dateien erstellt, aber dieses Mal möchte ich Mund verwenden.

application.css


 *= require simple_calendar
# simple_Lesen Sie die CSS des Kalenders

ruby:reservations.index.html.erb



<p id="notice"><%= notice %></p>

<h1>Reservations</h1>

<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Start time</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @reservations.each do |reservation| %>
      <tr>
        <td><%= reservation.name %></td>
        <td><%= reservation.start_time %></td>
        <td><%= link_to 'Show', reservation %></td>
        <td><%= link_to 'Edit', edit_reservation_path(reservation) %></td>
        <td><%= link_to 'Destroy', reservation, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

<br>

<!--von hier--!>
<%= month_calendar events: @reservations do |date, reservations| %>
  <%= date %>

  <% reservations.each do |reservation| %>
    <div>
      <%= reservation.start_time.hour %>:<%= reservation.start_time.min %>
      <%= reservation.name %>
    </div>
  <% end %>
<% end %>
<!--Addiere hier--!>

<%= link_to 'New Reservation', new_reservation_path %>

スクリーンショット 2020-11-02 23.49.48.png Ich glaube, ich konnte den Kalender anzeigen!

スクリーンショット 2020-11-02 23.52.22.png

Wenn Sie eine Reservierung hinzufügen, wird diese im Kalender angezeigt

Das allein ist langweilig, also fügen wir eine Validierung hinzu.

Machen Sie Ihre eigene spezielle Validierung

Ich möchte diesmal die Anzahl der Reservierungen begrenzen, daher sind Reservierungen samstags und sonntags nicht möglich. Vergangene Daten können nicht ausgewählt werden Ich möchte eine enorme besondere Bestätigung machen, dass die Reservierungszeitzone nur 13:15 und 19:15 ist!

reservation.rb


class Reservation < ApplicationRecord
  validates :name, presence: true
  validate :date_before_start
  validate :start_time_not_sunday
  validate :start_time_not_saturday
  validate :time_only
  validates :start_time, uniqueness: { message: 'Ist von einem anderen Benutzer reserviert' }

  def date_before_start
    errors.add(:start_time, "Ein Datum in der Vergangenheit kann nicht ausgewählt werden") if start_time < Date.today
  end

  def start_time_not_sunday
    errors.add(:start_time, "Sonntag kann nicht ausgewählt werden") if start_time.sunday?
  end

  def start_time_not_saturday
    errors.add(:start_time, "Samstag kann nicht ausgewählt werden") if start_time.saturday?
  end
  
  def time_only
    if hour_only_1 && min_only
      true
    elsif hour_only_2 && min_only
      true
    else
      errors.add(:start_time, "(Zeit)Ist 13:15 oder 19:Wird 15 sein")
    end
  end

  def hour_only_19
    start_time.hour == 19
  end

  def hour_only_13
    start_time.hour == 13
  end

  def min_only
    start_time.min == 15
  end
end

date_before_time gibt an, dass Sie in der Vergangenheit kein Datum auswählen können. Samstage und Sonntage können nicht mit start_time_not_subday und start_time_notsaturday reserviert werden! start_time.sunday? Etc. date_time (Typ) Sonntag? Ist es? Es kann so ausgedrückt werden!

Ab hier ist die Produktion! !! Wir werden Reservierungen auf zwei Stunden, 13:15 und 19:15, beschränken.

Da können Sie die Zeit mit start_time.hour und die Anzahl der Minuten mit start_time.min angeben Wir werden dies auf 13:00, 19:00 und 15 Minuten beschränken!

Erstellen Sie eine time_only-Methode, um die Zeit zu begrenzen! !! Wenn Sie start_time auf uniqqueness: true setzen, können Reservierungen nicht gleichzeitig vorgenommen werden. Die maximale Anzahl von Reservierungen pro Tag beträgt also 2! !!

Sonderedition

Diesmal war es eine ganz besondere Form, also habe ich meine eigene Validierung durchgeführt, jedoch für die Datums- / Uhrzeitvalidierung Es gibt nützliche Edelsteine wie validates_timeliness! https://github.com/adzap/validates_timeliness

# in Gemfile
gem 'validates_timeliness', '~> 5.0.0.beta1'

# Run bundler
$ bundle install

Zum Beispiel, wenn Sie die Reservierungszeit zwischen 9:00 und 5:00 Uhr begrenzen möchten validates_time :booked_at, between: ['9:00am', '5:00pm'] Sie können es einfach implementieren, indem Sie es in eine Form wie diese schreiben! !!

Recommended Posts

Implementieren Sie ein Reservierungssystem mit Rails und einfachem Kalender! Fügen wir datetime eine Validierung hinzu!
So implementieren Sie ein kreisförmiges Profilbild mit CarrierWave und R Magick in Rails
[Rails] Eine einfache Möglichkeit, eine Selbsteinführungsfunktion in Ihrem Profil zu implementieren
[Rails] Fügen Sie einen Bestätigungsbildschirm und einen Abschlussbildschirm hinzu, um die Registrierung der Mitgliedschaft zu erstellen.
Ich habe versucht, eine einfache Anwendung mit Dockder + Rails Scaffold zu erstellen
[Rails] Führen Sie einen einfachen Kalender ein und fügen Sie in zusätzliche Ereignisse einen "Bestätigungsbildschirm" ein
So implementieren Sie eine Diashow mit Slick in Rails (einzeln und mehrfach nacheinander)
[Schienen] So erstellen Sie eine Tabelle, fügen eine Spalte hinzu und ändern den Spaltentyp
[Rails] [Hinweis] Wann = zu <%%> hinzugefügt werden soll und wann nicht
So implementieren Sie die Image-Veröffentlichung mithilfe von Schienen
Ein Memo zum Erstellen eines einfachen Formulars, das nur HTML und CSS in Rails 6 verwendet
[Rails] So erstellen Sie ein Diagramm mit lazy_high_charts
Tag-Funktion zu Rails hinzufügen. Verwenden Sie Acts-as-Taggable-On
So implementieren Sie eine ähnliche Funktion in Rails
Ich habe versucht, einen Server mit Netty zu implementieren
Kalenderimplementierung und bedingte Verzweigung im einfachen Kalender von Rails Gem
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
[Rails] Erstellen Sie eine Sitemap mit sitemap_generator und stellen Sie sie in GAE bereit
Erstellen wir ein Datei-Upload-System mit der Azure Computer Vision-API und dem Java SDK von Azure Storage