ruby '2.6.5' rails '6.0.0' simple_calendar "~> 2.0"
«En tant que condition préalable, différents appareils sont créés pour l'utilisateur et le médecin. '' Vous trouverez ci-dessous l'URL associée. Paramètres de routage à partir de la création de fichiers lors de la création de plusieurs appareils et de la création d'écrans de connexion séparés [Je veux changer le chemin après une nouvelle inscription après m'être connecté avec plusieurs appareils. ] (https://qiita.com/kinpin/items/57b1657f9054189956c3)
Créez une fonction qui permet à l'utilisateur et au médecin (appareil différent) d'exécuter une telle fonction de calendrier.
Créer une réservation, modifier l'heure de réservation, supprimer → Fonction que le médecin peut faire
Faire une réservation → Fonction que l'utilisateur peut faire
gem "simple_calendar", "~> 2.0"
% rails g model reservation
class CreateReservations < ActiveRecord::Migration[6.0]
def change
create_table :reservations do |t|
t.references :doctor, foreign_key:true
t.references :user, foreign_key:true
t.datetime :start_time
t.datetime :end_time
t.timestamps
end
end
end
class Reservation < ApplicationRecord
belongs_to :doctor
belongs_to :user, optional: true
validates :start_time, presence: true
validates :end_time, presence: true
end
optionnel: true est décrit car il autorise nil de la clé externe. C'est parce qu'il n'y a pas de user_id lors de la création d'une nouvelle réservation. La réservation est créée par le médecin, il y a donc toujours un doctor_id.
Exécutez les rails db; migrez.
% rails db:migrate
Les fonctions que l'utilisateur peut effectuer et les fonctions que le médecin peut effectuer sont différentes, et il est étrange que l'utilisateur et le médecin passent par le même contrôleur en raison de problèmes de sécurité. Créez donc des contrôleurs sous différents répertoires.
% rails g controller doctors/reservations
% rails g controller users/reservations
namespace :doctors do
resources :reservations
end
namespace :users do
resources :reservations
end
Si vous effectuez des itinéraires de rails, vous pouvez voir que chaque itinéraire a été créé.
DELETE /users/:id(.:format) users#destroy
doctors_reservations GET /doctors/reservations(.:format) doctors/reservations#index
POST /doctors/reservations(.:format) doctors/reservations#create
new_doctors_reservation GET /doctors/reservations/new(.:format) doctors/reservations#new
edit_doctors_reservation GET /doctors/reservations/:id/edit(.:format) doctors/reservations#edit
doctors_reservation GET /doctors/reservations/:id(.:format) doctors/reservations#show
PATCH /doctors/reservations/:id(.:format) doctors/reservations#update
PUT /doctors/reservations/:id(.:format) doctors/reservations#update
DELETE /doctors/reservations/:id(.:format) doctors/reservations#destroy
users_reservations GET /users/reservations(.:format) users/reservations#index
POST /users/reservations(.:format) users/reservations#create
new_users_reservation GET /users/reservations/new(.:format) users/reservations#new
edit_users_reservation GET /users/reservations/:id/edit(.:format) users/reservations#edit
users_reservation GET /users/reservations/:id(.:format) users/reservations#show
PATCH /users/reservations/:id(.:format) users/reservations#update
PUT /users/reservations/:id(.:format) users/reservations#update
DELETE /users/reservations/:id(.:format) users/reservations#destroy
Il est affiché sur l'écran du médecin. Le médecin crée un lien qui passe au nouvel écran de réservation, à l'écran d'édition et à l'écran de suppression sur l'écran du salon du médecin, et l'utilisateur crée un lien qui passe à l'écran de réservation sur l'écran du salon du médecin.
Tout d'abord, insérez le calendrier.
<%= month_calendar do |date| %>
<%= date.day %>
<% end %>
Ceci termine la création du modèle de calendrier.
`Ici, quelle méthode est utilisée pour déterminer la réservation de l'utilisateur, mais la conclusion est modifier. '' Comme la table de réservation contient des données au moment de la liste de réservation, l'ajout de user_id est considéré comme ajoutant l'un des enregistrements.
doctors/reservations_controller.rb
def new
@reservation = Reservation.new
end
def create
@reservation = Reservation.new(reservation_params)
if @reservation.save
redirect_to doctor_path(current_doctor.id)
else
render :new
end
end
def edit
@reservation = Reservation.find(params[:id])
end
def update
@reservation = Reservation.find(params[:id])
if @reservation.update(reservation_params)
redirect_to doctor_path(current_doctor.id)
else
render :edit
end
end
def destroy
@reservation = Reservation.find(params[:id])
if @reservation.destroy
redirect_to doctor_path(current_doctor.id)
else
render :show
end
end
private
def reservation_params
params.require(:reservation).permit(:start_time, :end_time).merge(doctor_id: current_doctor.id)
end
end
users/reservations_controller.rb
def edit
@reservation = Reservation.find(params[:id])
@doctor = Doctor.find(params[:id])
end
def update
@reservation = Reservation.find(params[:id])
if @reservation.update(user_id: current_user.id)
redirect_to doctor_path(@reservation.doctor_id)
else
render :edit
end
end
L'affichage de la vue doit encore être affiné, mais cela vous permet de définir la fonction de réservation de calendrier minimum. Je vais l'ajouter à nouveau. C'est ainsi que nous avons introduit simple_calendar. Si vous avez des suggestions, faites-le nous savoir! !!
Recommended Posts