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

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

詳細はこちら
Ruby

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

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

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Q&A

解決済

1回答

613閲覧

データの保存をindexビューで行いたいです。

jm_swim

総合スコア8

Ruby

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

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

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

0グッド

0クリップ

投稿2021/01/10 13:56

編集2021/01/11 01:00

前提・実現したいこと

現在railsで投稿アプリを作成しています。
simple_calendarを用いて、入力したデータをカレンダーに反映させる実装までは行えました。ですが、カレンダーを表示しているビュー(index)とデータを入力するビュー(現在はnew)を一つのビュー(index)にしたいと考えております。しかし、ストロングパラメーターのエラーがかかっていて実装できていない状況です。
エラーを回避する方法はあるでしょうか?
お力添えをよろしくお願いいたします。

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

ActionController::ParameterMissing in BoardsController#create param is missing or the value is empty: board def board_parameter params.require(:board).permit(:name, :title, :start_time).merge(coach_id: current_coach.id, name: current_coach.name) end def boards_parameter

該当のソースコード

boardコントローラー class BoardsController < ApplicationController before_action :correct_post, only: [:edit] before_action :authenticate_user!, unless: proc { coach_signed_in? } def index @boards = Board.all end def new @board = Board.new end def show @board = Board.find(params[:id]) end def create if current_coach.present? Board.create(board_parameter) else current_user.present? Board.create(boards_parameter) end binding.pry redirect_to boards_path end def destroy @board = Board.find(params[:id]) @board.destroy redirect_to boards_path end def edit @board = Board.find(params[:id]) end def update @board = Board.find(params[:id]) if @board.update(board_parameter) redirect_to boards_path else render 'edit' end end private def board_parameter params.require(:board).permit(:name, :title, :start_time).merge(coach_id: current_coach.id, name: current_coach.name) end def boards_parameter params.require(:board).permit(:name, :title, :start_time).merge(user_id: current_user.id, name: current_user.name) end def correct_post @board = Board.find(params[:id]) redirect_to boards_path unless @board.coach_id == current_coach.id end end
indexビュー <% content_for :css do %> <%= stylesheet_link_tag 'board-index' %> <% end %> <div class="board-top inner"> <h2>コーチの討論時間一覧</h2> <%= form_with(model: @board, local: true) do |form| %> <% if coach_signed_in? %> <div class="title"> <%= form.label :教える種目, class: "style" %> <p><%= form.text_field :title %></p> </div> <div class="time"> <%= form.label :開始時間, class: "times" %> <p><%= form.datetime_select :start_time %></p> </div> <div class="submit"> <%= form.submit "送信", class: "send" %> </div> <% else user_signed_in? %> <div class="title"> <%= form.hidden_field :title %> </div> <div class="time"> <%= form.label :開始時間, class: "times" %> <p><%= form.datetime_select :start_time %></p> </div> <div class="submit"> <%= form.submit "送信", class: "send" %> </div> <p>※参加したい講座と全く同じ時間を登録してください</p><br> <% end %> <% end %> <%= link_to 'トップへ戻る', root_path(@boards), class: "top" %> <br> <%= month_calendar events: @boards do |date, board| %> <%= date.day %><br> <% board.each do |board| %> <% if board.coach_id.present? %> <%= board.name %><br> <% if coach_signed_in? %> <%= link_to board.title, board_path(board) %><br> <%= link_to board.start_time.strftime('%H:%M'), board_path(board) %><%= "〜" %> <% else %> <%= board.title %> <%= board.start_time.strftime('%H:%M') %><%= "〜" %> <% end %> <% else %> ↪︎<%= board.name %> <% end %> <% end %> <% end %> </div>

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

拙い文章で申し訳ありません。
わからない部分、追加して欲しいコードがありましたら、コメントいただけると幸いです。

よろしくお願いいたします。

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

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

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

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

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

winterboum

2021/01/10 13:59

indexのviewを載せてください
m.ts10806

2021/01/10 22:50 編集

役割分担の観点から「index」と同一にするのは悪手では? 「画面遷移が嫌だ」ならAjaxでバックグラウンド実行して結果だけ受け取るとか手はあります。(コントローラ、メソッドは用意する必要はあるが「役割分担」なので必要経費)
jm_swim

2021/01/11 01:01

winterboum様 indexビューを追加しました。
jm_swim

2021/01/11 01:03

m.ts10806様 あまり良くないことなのですね。 Ajaxのバックグラウンドについて知らないので自分で検索をかけてみます。
m.ts10806

2021/01/11 01:06

コントローラメソッドも機能 モデルも機能 ルーティングも機能 役割があるから「機能」に切り出します。 「新規登録と編集を同じフォームで」というのは良くあることですが、あくまで「同じviewを使う」だけであって登録と更新では機能が違うので投げる先は分けるべきです。
maisumakun

2021/01/11 01:20

> 登録と更新では機能が違うので投げる先は分けるべきです。 それはすでに成立しているのかと思うのですが。
jm_swim

2021/01/11 01:27

winterboum様 m.ts10806様 maiosumakun様 ご回答ありがとうございました。無事解決しました。 初学者なので、たくさん質問をしてアウトプットすると共に知識を集めて行けたらと思います。 引き続きよろしくお願いいたします。
guest

回答1

0

ベストアンサー

indexアクションで@boardが定義されていませんので、form_with(model: @boardで正しくモデルクラスが渡されません(nilが入っているものとして処理が進みます)。

このフォームは、新規作成・更新のどちらなのでしょうか?

投稿2021/01/11 01:03

maisumakun

総合スコア145967

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

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

jm_swim

2021/01/11 01:12

maisumakun様 新規作成を実装しようとしています。
maisumakun

2021/01/11 01:19

でしたら、コントローラー側に「@board = Board.new」のように入れておきましょう。
jm_swim

2021/01/11 01:24

maisumakun様 @board = Board.newを追加したら解決しました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問