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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

パラメータ

関数やプログラム実行時に与える設定値をパラメータと呼びます。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

1回答

1608閲覧

Rails submit押下後のエラー(パラメータが空の)解消方法を知りたい

TakumiAizawa

総合スコア5

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

パラメータ

関数やプログラム実行時に与える設定値をパラメータと呼びます。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2020/05/29 04:03

前提・実現したいこと

書類管理アプリを作成しています。

<停滞している箇所の手順>
担当者がデータを登録申請 → 承認者が承認画面Requestにて承認内容を選び、承認
→ 登録画面Cabinetへ登録される(ここで停滞)

承認登録フォームでsubimtボタンを押下するとエラーがでます。
解決方法をご教示いただきたくお願いいたします。

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

ActionController::ParameterMissing in CabinetsController#create
param is missing or the value is empty: cabinet

該当のソースコード

コントローラー

class CabinetsController < ApplicationController before_action :require_user_logged_in, only: [:index] def index @msg = 'Cabinet data.' @cabinets = Cabinet.order(id: :asc).page(params[:page]).per(10) end def show end def new @cabinet = Cabinet.find(params[:id]) end def create @cabinet = Cabinet.new(cabinet_params) if @cabinet.save flash[:success] = '書庫への登録が完了しました。' redirect_to cabinets_url else flash.now[:danger] = '書庫への登録に失敗しました。再度やり直してください。' render 'requests/index' end end def edit end def update end def destroy end private def cabinet_params params.require(:cabinet).permit(:file_no, :file_name, :expired_at, :placed_at) end

View

<h1 class="display-3 text-primary">Request</h1> <h3><%= @msg %></h3> <%= form_with(model: @cabinet, url: cabinets_path,local: true) do |f| %> <table class="table table-striped table-bordered text-center "> <tr class="table-primary "> <th> </th><th>No.</th><th>File No.</th><th>File Name</th><th>保管期限</th><th>保管場所</th><th>起案者</th><th>起案日</th><th>コメント</th> </tr> <% @requests.each do |obj| %> <tr> <td> <div class="form-group"> <%= f.check_box :cabinet_id, id: "check1" %> </div> </td> <td><%= obj.id %></td> <td><%= obj.file_no %></td> <td><%= obj.file_name %></td> <td><%= obj.expired_at %></td> <td><%= obj.placed_at %></td> <td><%= obj.user_id %></td> <td><%= obj.created_at.to_s(:datetime_jp) %></td> <td><%= obj.comment %></td> </tr> <% end %> </table> <%= f.submit '承認', class: 'btn btn-primary ' %> <% end %> <%= paginate @requests %>

試したこと

・エラー画面のメッセージからパラメータを渡せていないことから
rails consoleでRequest.allにてデータの有無を確認もデータは存在していた。
・コードに誤りがあるなら、承認ボタン押下後はCabinet Controllerへリンクできているため、Cabinet ControllerのCreateのコードに誤りがある?

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

ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-linux]
Rails 5.2.4.2
ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

Viewをみますと送り返すパラメーターに cabinet_id はありますが他がありません。
ん?
よく見るとそのcabinet_id は @requests.each のloopの中ですが、 @requestsがnilなので出力されてませんね。
つまり、controllerに返す項目が一つもないviewです。

必要な項目の入力エリアを用意してください

投稿2020/05/29 13:20

winterboum

総合スコア23347

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

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

TakumiAizawa

2020/05/29 14:05

ご確認ありがとうございます。 <必要な項目の入力エリアを用意してください 入力フォームを用意せず 例えば添付ファイルのようにRequest表(テーブル)のカラムを 左列のチェック欄にチェックを入れて その内容を指定のcontrollerに返す(submit)することは可能なのでしょうか。 https://gyazo.com/782b64a73b86e4a438dc79870ba38178
winterboum

2020/05/29 14:12

できますが、その場合は createでは無いですよね? 選んだものをどうしたいのですか? 多くの場合は まとめて削除する まとめてステータスを変える 内容をshowする あたりですが、それら?
TakumiAizawa

2020/05/29 14:35

ご回答ありがとうございます。 やりたいこととしましては下記となります。 ・view画面でrequest(管理者画面)を選ぶ ・選んだrequestのidをparamsに含め、cabinetコントローラのcreateに送る ・createアクションでcabinet(登録画面)の新規作成、requestの削除(viewへリダイレクト) 宜しくお願いいたします。
winterboum

2020/05/29 20:45

createで何をやるのか、が良くわからないので、idをcreateに送るところまでにしてください。 そこまででも大分道は遠い気がする。 viewってどのkontrollerのどのactionから呼ばれる何と言うviewですか? そこでreauestの一覧が表示されるところまではできていますか?
TakumiAizawa

2020/05/30 00:48

お世話になります。 ViewはRequest controllerの new とcreateアクションから呼ばれる index.html.erbのviewです。 request一覧の表示はできております。 アドバイスいただきました、まずはidをcreateに送るところまで進めてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問