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.
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.
Terminal
rails new _6.0.0_App Name-d mysql
Name der CD-App
bundle install
rails g model task
rails g model start_time
rails g model stop_time
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
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
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.
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
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.
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