Utilisez le calendrier simple de Gem pour planifier des réservations dans le calendrier Nous procéderons en partant du principe que vous avez des connaissances de base sur le rubis et les rails
Rails 6.0.3 ruby 2.7.0
Cette fois, en supposant que nous allons créer une mini application, nous allons créer une table de réservations et ajouter des colonnes pour le nom (chaîne) et start_time (type datetime).
rails new calendar_app
Tout d'abord, les rails habituels neufs
bundle
Prenons également l'habitude d'installer des bundles.
Gemfile
gem 'simple_calendar', '~> 2.0'
bundle
Ajoutez simple_calendar au gemfile et réinstallez le bundle
rails g scaffold reservationc name start_time:datetime
Cette fois, je voudrais implémenter facilement l'application en utilisant l'échafaudage.
rails db:migrate
N'oubliez pas les rails habituels db: migrate.
Accédez à http: // localhost: 3000 / avec des rails s! Si vous pouvez confirmer que vous vous tenez fermement
routes.rb
root 'reservations#index'
Modifions le chemin de l'itinéraire vers la page de liste de réservation.
Ensuite, nous préparerons la vue de simple_calendar.
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
Trois fichiers ont été créés, mais cette fois, j'aimerais utiliser la bouche.
application.css
*= require simple_calendar
# simple_Lire le CSS du calendrier
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>
<!--d'ici--!>
<%= 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 %>
<!--Ajouter ici--!>
<%= link_to 'New Reservation', new_reservation_path %>
Je pense que j'ai pu afficher le calendrier!
Si vous ajoutez une réservation, elle sera reflétée dans le calendrier ♪
Cela seul est ennuyeux, ajoutons donc la validation.
Je souhaite limiter le nombre de réservations cette fois, donc les réservations ne sont pas possibles les samedis et dimanches. Les dates passées ne peuvent pas être sélectionnées Je voudrais faire une formidable validation spéciale que le fuseau horaire de réservation est seulement 13h15 et 19h15!
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: 'Est réservé par un autre utilisateur' }
def date_before_start
errors.add(:start_time, "Impossible de sélectionner une date dans le passé") if start_time < Date.today
end
def start_time_not_sunday
errors.add(:start_time, "Impossible de sélectionner dimanche") if start_time.sunday?
end
def start_time_not_saturday
errors.add(:start_time, "Impossible de sélectionner samedi") 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, "(temps)Est 13:15 ou 19:Sera 15 ans")
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 indique que vous ne pouvez pas sélectionner une date dans le passé. Les samedis et dimanches ne peuvent pas être réservés avec start_time_not_subday et start_time_notsaturday! start_time.sunday? Etc. date_time (type) dimanche? Vraiment? Cela peut être exprimé ainsi!
De là, c'est la production! !! Nous limiterons les réservations à deux heures, 13h15 et 19h15.
Puisque vous pouvez spécifier l'heure avec start_time.hour et le nombre de minutes avec start_time.min Nous limiterons cela à 13h00, 19h00 et 15 minutes!
Créez une méthode time_only pour limiter le temps! !! De plus, en définissant start_time sur uniqqueness: true, les réservations ne peuvent pas être effectuées même en même temps, donc le nombre maximum de réservations pouvant être effectuées par jour est de 2! !!
Cette fois, c'était une forme très spéciale, donc j'ai fait ma propre validation, mais pour la validation datetime Il existe des gemmes utiles telles que validates_timeliness! https://github.com/adzap/validates_timeliness
# in Gemfile
gem 'validates_timeliness', '~> 5.0.0.beta1'
# Run bundler
$ bundle install
Par exemple, si vous souhaitez limiter le temps de réservation entre 9h00 et 5h00 validates_time :booked_at, between: ['9:00am', '5:00pm'] Vous pouvez facilement l'implémenter en l'écrivant sous une forme comme celle-ci! !!
Recommended Posts