ruby '2.6.5' rails '6.0.0' simple_calendar "~> 2.0"
`Voraussetzung ist, dass für Benutzer und Arzt unterschiedliche Geräte erstellt werden. `` Unten ist die zugehörige URL. Routing-Einstellungen aus der Dateierstellung beim Erstellen mehrerer Geräte und Erstellen separater Anmeldebildschirme [Ich möchte den Pfad nach der neuen Registrierung ändern, nachdem ich mich mit mehreren Geräten angemeldet habe. ]] (https://qiita.com/kinpin/items/57b1657f9054189956c3)
Erstellen Sie eine Funktion, mit der Benutzer und Arzt (unterschiedliche Geräte) eine solche Kalenderfunktion ausführen können.
Reservierung erstellen, Reservierungszeit bearbeiten, löschen → Funktion, die der Arzt ausführen kann
Reservierung vornehmen → Funktion, die der Benutzer ausführen kann
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
optional: true wird beschrieben, weil es null des externen Schlüssels zulässt. Dies liegt daran, dass beim Erstellen einer neuen Reservierung keine Benutzer-ID vorhanden ist. Die Reservierung wird vom Arzt erstellt, daher gibt es immer eine doctor_id.
Schienen ausführen db; migrieren.
% rails db:migrate
Die Funktionen, die der Benutzer ausführen kann, und die Funktionen, die der Arzt ausführen kann, sind unterschiedlich, und es ist seltsam, dass Benutzer und Arzt aus Sicherheitsgründen denselben Controller durchlaufen. Erstellen Sie also Controller unter verschiedenen Verzeichnissen.
% rails g controller doctors/reservations
% rails g controller users/reservations
namespace :doctors do
resources :reservations
end
namespace :users do
resources :reservations
end
Wenn Sie Schienenrouten ausführen, können Sie sehen, dass jede Route erstellt wurde.
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
Es wird auf dem Bildschirm des Arztes angezeigt. Der Arzt erstellt einen Link, der zum neuen Reservierungsbildschirm, Bearbeitungsbildschirm und Löschbildschirm auf dem Bildschirm für die Arztshow übergeht, und der Benutzer erstellt einen Link, der zum Reservierungsbildschirm auf dem Bildschirm für die Arztshow übergeht.
Fügen Sie zuerst den Kalender ein.
<%= month_calendar do |date| %>
<%= date.day %>
<% end %>
Damit ist die Erstellung der Kalendervorlage abgeschlossen.
`Hier, welche Methode verwendet wird, um die Reservierung des Benutzers zu bestimmen, aber die Schlussfolgerung wird bearbeitet. `` Da die Reservierungstabelle zum Zeitpunkt der Reservierungsliste Daten enthält, wird das Hinzufügen von user_id als Hinzufügen eines der Datensätze angesehen.
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
Die Anzeige der Ansicht muss noch verfeinert werden, aber hier können Sie die Mindestfunktion für die Kalenderreservierung festlegen. Ich werde es wieder hinzufügen. So haben wir simple_calendar eingeführt. Wenn Sie Vorschläge haben, lassen Sie es uns bitte wissen! !!
Recommended Posts