[RUBY] [Schienen] Startzeit und Endzeit speichern

Start- und Endzeiten speichern

Erstellen Sie in Schienen ein Programm, das die Start- und Endzeiten von Aufgaben speichert. Da es viele Teile meines eigenen Stils gibt, würde ich es begrüßen, wenn Sie es als eine der Methoden bezeichnen könnten.

画面収録 2020-09-25 2.57.23.mov.gif

Denkweise

Wir streben einen Mechanismus an, mit dem Sie die Start- und Endformulare nur einmal drücken können. Schreiben Sie insbesondere eine if-Anweisung in die Ansicht, damit die Startschaltfläche nicht angezeigt wird, wenn die Startzeitdaten der Aufgabe enthalten sind. Der Prozess, der zu dieser Idee führte, ist wie folgt.

Vorbereitung

Terminal

rails new  _6.0.0_App Name-d mysql
Name der CD-App
bundle install

Modell erstellen

rails g model task
rails g model start_time
rails g model stop_time

Modelländerung

Wenn Sie einen Fehler machen, weisen Sie bitte darauf hin.

php;task.rb


class Task < ApplicationRecord
  has_one :start_time
  has_one :stop_time
end

php;stop_time.rb


class StopTime < ApplicationRecord
  belongs_to :task
end

php;start_time.rb


class StartTime < ApplicationRecord
  belongs_to :task
end

Migrationsdatei

class CreateTasks < ActiveRecord::Migration[6.0]
  def change
    create_table :tasks do |t|
      t.string :title
      t.timestamps
    end
  end
end

php;202..._create_start_times.rb


class CreateStartTimes < ActiveRecord::Migration[6.0]
  def change
    create_table :start_times do |t|
      t.references :task, foreign_key: true
      t.timestamps
    end
  end
end

php;202..._create_stop_times.rb


class CreateStopTimes < ActiveRecord::Migration[6.0]
  def change
    create_table :stop_times do |t|
      t.references :task, foreign_key: true
      t.timestamps
    end
  end
end

Terminal

rails db:create
rails db:migrate

Routing

Rails.application.routes.draw do
  root "tasks#index"
  resources :tasks, only: [:index, :create] do
    resources :start_times, only: :create
    resources :stop_times, only: :create
  end 
end

Es werden nur die zu verwendenden angegeben. Auch diesmal ist es verschachtelt, aber Sie können es tatsächlich ohne es machen.

Regler

Terminal

rails g controller tasks
rails g controller start_times
rails g controller stop_times

php;start_times_controller.rb


class StartTimesController < ApplicationController
  def create
    StartTime.create(start_time_params)
    redirect_to root_path
  end

  private
  def start_time_params
    params.permit(:task_id)
  end
end

php;stop_times_controller.rb


class StopTimesController < ApplicationController
  def create
    StopTime.create(stop_time_params)
    redirect_to root_path
  end

  private
  def stop_time_params
    params.permit(:task_id)
  end
end

php;tasks_controller.rb


class TasksController < ApplicationController
  def index
    @tasks = Task.all
  end

  def create
    task = Task.create(task_params)
    redirect_to root_path
  end

  private
  def task_params
    params.permit(:title)
  end
end

Aussicht

Bitte überprüfen Sie die URL auf Schienenrouten und geben Sie sie ein.

php;views/tasks/index.html.haml


-#Formular zum Speichern von Aufgaben
= form_with url: tasks_path, method: :post do |f|
  = f.text_field :title
  = f.submit "send"

-#Aufgabenlistenanzeige
- @tasks.each do |task|
  %br
Titel
  = task.title

  -#Wenn Sie die Uhrzeit überprüfen möchten, beschreiben Sie sie bitte.
  - if task.start_time != nil
    %br
Startzeit
    = task.start_time.created_at
    %br
  - if task.stop_time != nil
Endzeit
    = task.stop_time.created_at
    %br
    %br
  -#Bisher

  - if task.start_time == nil
    = form_with url: task_start_times_path(task_id: task.id), method: :post do |f|
      = f.submit "Start"
      %br

  - if task.start_time != nil && task.stop_time == nil 
    = form_with url: task_stop_times_path(task_id: task.id), method: :post do |f|
      = f.submit "Ende"
      %br

Dieses Mal habe ich new.html.haml überhaupt nicht erstellt. In form_with können Sie jedoch die der Erstellungsaktion entsprechende URL angeben und method :: post hinzufügen, um sie direkt zu speichern. Wenn es nicht funktioniert, sollten Sie bind.pry usw. verwenden, um den Wert, den Sie senden, und den Wert, den Sie empfangen, zu überprüfen.

Zusammenfassung

Es fühlt sich an, als wäre es mit brutaler Gewalt gemacht worden. Wenn Sie also einen besseren Weg haben, kommentieren Sie bitte!

Recommended Posts

[Schienen] Startzeit und Endzeit speichern
[Schienen] Überprüfen Sie die Startzeit (Datum / Uhrzeit-Typ) und die Endzeit
Schienen und Formulardaten
Datum (und Uhrzeit
[Schienen] Unterschied zwischen Erstellungsmethode und neuer + Speichermethode
Schienen gültig und ungültig?
Implementierung der Rails CRUD-Funktion ② (diesmal bearbeitet und detailliert)
Ändern Sie Datum und Uhrzeit in Rails in japanische Notation
[Schienen] Vorsichtsmaßnahmen beim Vergleich von Datum und Uhrzeit mit DateTime
Implementierungsrichtlinie zum dynamischen Speichern und Anzeigen der Zeitzone in Rails
AWS und On-Pres-Zeitverzögerung
[Schienen] Speichern Sie Bilder mit Carrierwave
[Rails] Erhalten Sie access_token zum Zeitpunkt der Twitter-Authentifizierung mit Sorcery und speichern Sie es in der Datenbank
Rails Posts und User Linkage
[Schienen] erfordern Methode und Genehmigungsmethode
Rails Tutorial Records und Memorandum # 0
Schienenpfad und URL-Methoden
Speichern und zeigen Sie mehrere Bilder an
Schienen sind schwierig und schmerzhaft!
Schienen sind schwierig und schmerzhaft! Ⅱ
[Rails] strftime dies und das
Rails-Webserver und Anwendungsserver
[Rails] Warum wird gerendert, wenn das Speichern erfolgreich ist und redirect_to fehlschlägt?