Ich habe den Ablauf bis zur Implementierung von simple_calendar in Ruby on Rails zusammengefasst.

Ich wollte eine Funktion zur Einstellung der Reservierungszeit mithilfe eines Kalenders in der ursprünglichen Anwendung implementieren und fasste den Ablauf zusammen.

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)

** Was willst du tun ** Image from Gyazo

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

① Schreiben Sie Folgendes in die Gemfile- und Bundle-Installation.

   gem "simple_calendar", "~> 2.0"

② Rails s wird neu gestartet.

③ Erstellen Sie ein Modell. Da dies eine Reservierungsfunktion ist, erstellen wir ein Reservierungsmodell.

  % rails g model reservation

④ Erstellen Sie eine Migrationsdatei.

   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

⑤ Erstellen Sie eine Zuordnung in der Modelldatei. Ich schreibe es auch in das Benutzermodell Doctor Model (weggelassen)

   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

⑥ Als nächstes benötigen Sie einen Controller, es gibt jedoch einige Einschränkungen.

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

⑦ Auf diese Weise können der Controller, den der Benutzer durchläuft, und der Controller, den der Arzt durchläuft, getrennt werden.

doctorreservation.png

user.reservation.png

⑧ Stellen Sie das Routing ein. Wir verwenden den Namespace, weil wir für jedes Gerät den angegebenen Pfad verwenden möchten.

   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

⑨ Erstellen Sie die gewünschte Ansicht.

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.

⑩ Definieren Sie die Methoden zum Erstellen, Bearbeiten und Löschen von Reservierungen im Doctor Controller und treffen Sie Reservierungsentscheidungen im User Controller.

`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

Ich habe den Ablauf bis zur Implementierung von simple_calendar in Ruby on Rails zusammengefasst.
[Ruby on Rails] Bis zur Einführung von RSpec
Rails neu in Ruby on Rails ~ Memorandum bis zur Bereitstellung 2
Rails neu in Ruby on Rails ~ Memorandum bis zur Bereitstellung 1
[Ruby on Rails] Zeigt den Seitentitel schnell im Browser an
Anfänger Ruby on Rails Was ich gelernt habe, wird zusammengefasst
Ruby on Rails Japanisch-Englisch kompatibler i18n
[Ruby on Rails] Stoppen Sie "Looping bis ..."
Wo ich mich für den Ruby on Rails-Kurs von Progate interessierte [params]
Dinge, an die Sie sich erinnern sollten, und Konzepte im Ruby on Rails-Tutorial
Ruby on Rails in Visual Studio-Codespaces
Anfänger haben mit Ruby on Rails ein Portfolio erstellt
So debuggen Sie die Verarbeitung im Ruby on Rails-Modell nur mit der Konsole
Cloud-IDE: Heroku konnte nicht im Ruby on Rails-Tutorial installiert werden
Eine Reihe von Ablauf der Tabellenerstellung → Datensatzerstellung, Löschung → Tabellenlöschung in Ruby on Rails
Ich habe versucht, die Sitzung in Rails zu organisieren
Wenn das Ruby on Rails-Terminal zurückrollt
Empfehlung der Serviceklasse in Ruby on Rails
Veröffentlichen Sie die mit Ruby on Rails erstellte App
(Ruby on Rails6) Erstellen von Daten in einer Tabelle
Ich möchte den Wert in Ruby erhalten
Ich habe mit Ruby On Rails ein Portfolio erstellt
So beheben Sie Fehler, die beim Integrationstest "Ruby on Rails" auftreten
[Ruby on Rails] Wie schreibe ich eine Enumeration auf Japanisch?
[Ruby On Rails] Im verschachtelten Zustand die Beschreibung in Klammern nach dem Präfix in der link_to-Methode
[Ruby on Rails] So ändern Sie den Spaltennamen
[Ruby] puma kann nicht auf einem Mac installiert werden [Rails usw.]
Ich habe das Anzeigeformat der JSON-Antwort von Rails zusammengefasst
[Ruby On Rails] So setzen Sie die Datenbank in Heroku zurück
[Ruby / Rails] Legen Sie einen eindeutigen (eindeutigen) Wert in der Klasse fest
Ruby on Rails Elementary
Ruby on Rails Grundlagen
[Ruby on Rails] Post-Bildvorschau-Funktion in Refile
Fragen zur Implementierung der Like-Funktion (Ajax) in Rails
Ruby On Rails Association
(Ruby on Rails6) Reflektiert den veröffentlichten Inhalt aus dem Formular
Versuchen Sie es mit dem Ruby on Rails-Abfrageattribut
Was mich an Progates Ruby on Rails-Kurs interessiert hat [jede Erklärung der Fehlermeldung]
Ruby on Rails 5 - Kurzanleitung zum Lernen, die im Feld Zusammenfassung verwendet werden kann
[Ruby on Rails] Nur den Benutzer, der Beiträge verfasst hat, dürfen bearbeiten
Ich habe versucht, das Ruby on Rails-Plugin mit vim-plug zu installieren
Schwierigkeiten beim Erstellen einer Ruby on Rails-Umgebung (Windows 10) (SQLite3)
(Ruby on Rails6) Anzeige der Datenbank, die die ID der Datenbank erhalten hat
Alle Inhalte der Listenseite löschen [Ruby on Rails]
Ein Hinweis zum Seed-Feature von Ruby on Rails
[Ruby on Rails] Geben Sie automatisch eine Adresse aus einer Postleitzahl ein
So zeigen Sie Diagramme in Ruby on Rails an (LazyHighChart)