🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1045閲覧

開始ボタン、終了ボタンの押下で打刻時間データを取得したい

kur

総合スコア3

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2021/01/28 06:53

前提・実現したいこと

rails初学者です。
基本的なruby on railsを学び、オリジナルのアプリを開発中です。
家事管理アプリを作成しており、メンバーはグループに所属しグループ内で家事のタスクやそれにかかった時間をデータとして可視化し、共有できるというものを目指しています。
現在、タスクを開始した時間と終了した時間を取得したいのですが時間の取得ができず躓いています…
開始時間と終了時間それぞれを取得したく、開始時間は下記のコードのようにuser_id,task_idと共に保存できたのですが、
終了時刻が保存できません。
開始時刻の取得の際にuser_id,task_idは存在しているのでtask_history_idを新たに定義し、終了時刻を取得する際にはそれを渡せばupdateする形でデータを取得できると考えているのですがどうコードを修正すべきか悩んでいます。

発生している問題・エラーメッセージ

エラーは出ていないのですが、データの取得ができていません。
該当の操作をした時のターミナルにはこのように表示されます。

Started PATCH "/task_histories/finish" for 省略 Processing by TaskHistoriesController#update as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"WahtGl/PMg/qVPsCJXXhCTl3KhvYxr7jb4U9jACB5OtxYJnx2RAj+w3tIl9SVheLRcbJylDk/FhukeGdBs7zZg==", "task_history_id"=>"", "id"=>"finish"} No template found for TaskHistoriesController#update, rendering head :no_content Completed 204 No Content in 21ms (ActiveRecord: 0.0ms)

該当のソースコード

schema.rb

ActiveRecord::Schema.define(version: 2021_01_28_030239) do create_table "groups", force: :cascade do |t| t.string "group_name" t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "task_histories", force: :cascade do |t| t.datetime "start_time" t.datetime "finish_time" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.integer "task_id" t.integer "user_id" end create_table "tasks", force: :cascade do |t| t.string "task_name" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.integer "group_id" end create_table "users", force: :cascade do |t| t.string "email", default: "", null: false t.string "encrypted_password", default: "", null: false t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" t.string "name" t.string "group_name" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.integer "group_id" t.index ["email"], name: "index_users_on_email", unique: true t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end end

routes.rb

Rails.application.routes.draw do devise_for :users, controllers: { registrations: 'users/registrations' } root to: 'homes#top' get 'homes/how' => 'homes#how',as: 'how' get 'homes/index' => 'homes#index', as: 'home' resources :tasks, only: [:new, :create, :index, :edit, :update, :destroy] resources :users, only: [:edit, :update] post 'task_histories/start' => 'task_histories#start', as: 'start' post 'task_histories/finish' => 'task_histories#finish', as: 'finish' resources :task_histories, only: [:new, :index, :edit, :update, :destroy] resources :groups, only: [:new, :create] get '/charts' => 'charts#index' # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html end

task_histories_contoroller/rb

class TaskHistoriesController < ApplicationController require "date" def new @task_id = params[:task_id] @task_history_id = TaskHistory.where(finish_time: nil) end def start @task_history = TaskHistory.new @task_history.task_id = params[:task_id] @task_history.start_time = DateTime.now @task_history.user_id = current_user.id @task_history.save render new_task_history_path end def finish @task_history = TaskHistory.find(params[:task_history_id]) @task_history.finish_time = DateTime.now # byebug @task_history.save redirect_to task_histories end def index @task_histories = TaskHistory.where(user_id: current_user.id) end def edit end def update end def destroy end end

task_histories/new.html.erb

<h1>timer</h1> <%= form_tag("start", method: :post, id: @task_id) do %> <%= hidden_field_tag :task_id, @task_id %> <input type="submit" value="Time Start"> <% end %> <%= form_tag("finish", method: :patch, id: @task_history_id) do %> <%= hidden_field_tag :task_history_id, @task_history_id %> <input type="submit" value="Time End"> <% end %> <!--条件分岐で打刻開始前はスタートボタンのみ表示 スタートボタンで打刻が開始されればストップボタンのみ表示に変更する-->

task_histories/index.html.erb

<h1>履歴</h1> <table class="table"> <tbody> <% @task_histories.each do |task_history| %> <tr> <td><%= task_history.user.name %></td> <td><%= task_history.task.task_name %></td> <td><%= task_history.start_time %></td> <td><%= task_history.finish_time %></td> </tr> <% end %> </tbody> </table>

試したこと

ターミナルのメッセージのNo template found〜に関してもviewやredirectの記述漏れを確認しましたが、問題はないかと思います。
ただ、redirect toで指定した一覧ページには遷移していないのでここにも問題があるのでしょうか?

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

@task_history_id@task_history.id

投稿2021/01/28 13:01

winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kur

2021/01/29 04:56

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問