質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

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

Q&A

解決済

1回答

1142閲覧

【Rails】@details={:category=>[{:error=>:blank}]}が解決できない

takuya861

総合スコア14

Ruby on Rails 5

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

0グッド

0クリップ

投稿2020/09/30 09:42

前提・実現したいこと

updateアクションでROLLBACKされてしまうエラーが発生しました。
binding.pryでupdateアクションを止めてエラー内容を確認しましたが、解決方法がわかりませんでした。
どなたかご教示いただけると幸いです。

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

Started PATCH "/tasks/1" for ::1 at 2020-09-30 14:08:31 +0900 Processing by TasksController#update as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"f5dUC6wLVZ6hUygEIQ/IV+toE8s4key0XmzrEGhs/Uq8Rc0pWB7o86veHsJJfKqCZbxfg+S3wl3lBEZx9eC87w==", "task"=>{"task_name"=>"テスト2", "task_users_id"=>"1", "temp_memo"=>"a", "end_date"=>"2020-09-30", "priority"=>"2", "status"=>"2", "start_date"=>"2020-09-30", "cont_memo"=>"a", "is_cron"=>"2", "is_share"=>"2", "message"=>"a"}, "commit"=>"登録", "id"=>"1"} Task Load (4.7ms) SELECT `tasks`.* FROM `tasks` WHERE `tasks`.`id` = 1 LIMIT 1 ↳ app/controllers/tasks_controller.rb:25 (0.1ms) BEGIN ↳ app/controllers/tasks_controller.rb:27 (0.2ms) ROLLBACK ↳ app/controllers/tasks_controller.rb:27 No template found for TasksController#update, rendering head :no_content Completed 204 No Content in 164ms (ActiveRecord: 5.0ms)

コンソールで@task.erroesを入力した際のソース

[6] pry(#<TasksController>)> @task.errors => #<ActiveModel::Errors:0x00007f80675c9808 @base= #<Task:0x00007f8063e80248 id: 1, task_users_id: 1, task_name: "テスト2", status: "2", message: "2", end_date: Tue, 29 Sep 2020 00:00:00 JST +09:00, temp_memo: "1", start_date: Wed, 30 Sep 2020 00:00:00 JST +09:00, priority: "2", cont_memo: "1", cont_memo: "1", amcestry: nil, created_at: Wed, 16 Sep 2020 09:00:00 JST +09:00, updated_at: Wed, 16 Sep 2020 09:00:00 JST +09:00, category_id: nil, is_cron: "2", is_share: "2">, @details={:category=>[{:error=>:blank}]}, @messages={:category=>["を入力してください"]}> (END)

該当のソースコード

edit.html.erb

<main class="py-4" id="main-content"> <div class="container gt-main-container"> <div class="row justify-content-center"> <div class="col-md-11 body-frame"> <div class="card"> <div class="card-header bg-primary text-white font-weight-bold">登録情報の更新</div> <div class="card-body"> <%= form_with model: @task, local: true do |f| %> <div class="form-group"> <%= f.label :task_name, "タスク名", class: "control-label" %> <span class="badge badge-danger">必須</span> <%= f.text_field :task_name, class: "form-control" %> </div> <div class="form-group"> <%= f.label :users_name, "担当者", class: "control-label" %> <span class="badge badge-danger">必須</span> <%= f.text_field :task_users_id, class: "form-control" %> <%# 変更の必要あり %> </div> <div class="form-group"> <%= f.label :temp_memo, "継続的なメモ", class: "control-label" %> <%= f.text_field :temp_memo, class: "form-control" %> <small type="text" id="memo" class="form-text text-muted"> この欄の内容が更新されない限り、タスクが更新されても内容は変化しません。「40%完了」のようなメモを書くのに適しています。タスク名の後に表示されます。12文字以内。 </small> </div> <div class="form-group"> <%= f.label :end_date, "期日", class: "control-label" %> <div class="input-group"> <%= f.date_field :end_date, class: "flatpickr-input form-control" %> <div class="input-group-append flatpickr-clear-button"> <span class="input-group-text"> <i class="fa fa-times text-danger"></i> </span> </div> </div> </div> <div class="form-group"> <%= f.label :priority, "優先度", class: "control-label" %> <%= f.select :priority, [['高い',1], ['普通',2], ['低い',3]], { selected: 2}, { class: "form-control"} %> </div> <div class="form-group"> <%= f.label :status, "ステータス", class: "control-label" %> <span class="badge badge-danger">必須</span> <%= f.select :status, [['進行中',1], ['終了',2], ['保留',3]], { selected: 1}, { class: "form-control"} %> </div> <div class="form-group"> <%= f.label :start_date, "開始日", class: "control-label" %> <div class="input-group"> <%= f.date_field :start_date, value: Date.today, class: "flatpickr-input form-control" %> <div class="input-group-append flatpickr-clear-button"> <span class="input-group-text"> <i class="fa fa-times text-danger"></i> </span> </div> </div> <small id="start_dateHelp" class="form-text text-muted">未入力の場合は、本日の日付が設定されます。</small> </div> <div class="form-group"> <%= f.label :cont_memo, "一時的なメモ", class: "control-label" %> <%= f.text_field :cont_memo, class: "form-control" %> <small id="tmp_memoHelp" class="form-text text-muted">タスクが更新されると上書きされます。「5分仕事」のようなメモを書くのに適しています。タスク名の前に表示されます。12文字以内。</small> </div> <div class="form-group"> <%= f.label :is_cron, "このタスクは繰り返し実行されますか?", class: "control-label" %> <span class="badge badge-danger">必須</span> <%= f.select :is_cron, [['はい', 1], ['いいえ', 2]], { selected: 2}, { class: "form-control"} %> <small id="is_cronHelp" class="form-text text-muted">「はい」を選択すると、タスクが終了したときに、同じ内容のタスクが新規に作成されます。</small> </div> <div class="form-group"> <%= f.label :is_share, "このカテゴリに属するメンバー共有のタスクとしますか?", class: "control-label" %> <span class="badge badge-danger">必須</span> <%= f.select :is_share, [['はい', 1], ['いいえ', 2]], { selected: 2}, { class: "form-control"} %> <small id="is_shareHelp" class="form-text text-muted">「はい」を選んだ場合、通常のタスクと違い、子タスクはカテゴリに参加するメンバーであれば作ることができるようになります。(メールやSlackなどの通知は行われません。)また、参加メンバーのダッシュボードに常時表示されるようになります。</small> </div> <div class="form-group"> <%= f.label :message, "なにかメッセージがあればここに入力してください。", class: "control-label" %> <%= f.text_field :message, class: "form-control" %> </div> <div class="form-group"> <%= f.submit '登録', class: "btn btn-primary" %> </div> <% end %> </div> </div> </div> </div> </div> </div> </main>

tasks_controller.rb

class TasksController < ApplicationController def index @tasks = Task.all end def new @task = Task.new end def destroy @task = Task.find(params[:id]) @task.destroy redirect_to tasks_path end def edit @task = Task.find(params[:id]) end def create end def update @task = Task.find(params[:id]) binding.pry if @task.update(task_params) redirect_to tasks_path end end def search @tasks = Task.where("task_name LIKE ?", "%#{params[:keyword]}%") respond_to do |format| format.html format.json { render json: @tasks } end end private def task_params params.require(:task).permit(:task_users_id, :task_name, :temp_memo, :end_date, :priority, :status, :start_date, :cont_memo, :is_cron, :is_share, :message) end end

task.rb

class Task < ApplicationRecord has_many :task_users has_many :User, through: :Task_users belongs_to :category end

category.rb

class Category < ApplicationRecord has_many :tasks end

試したこと

@task.errorsで内容確認→エラー内容の解読ができませんでした。

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

Rails 5.2.4.2

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

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

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

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

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

guest

回答1

0

自己解決

belongs_toのデフォルトが関連先の値を検査するようになったので、belongs_toにoptional: trueをつけて関連性の検査を解除した。

投稿2020/10/01 12:57

takuya861

総合スコア14

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問