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
Rails 6.0.3 ruby 2.7.0
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.
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.
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 %>
Ich glaube, ich konnte den Kalender anzeigen!
Wenn Sie eine Reservierung hinzufügen, wird diese im Kalender angezeigt
Das allein ist langweilig, also fügen wir eine Validierung hinzu.
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! !!
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