#わからないこと
railsでform_withで送信した際のパスをmodelで指定しないかぎり、エラーメッセージを表示することは不可能なのでしょうか?
まず、流れを説明すると、どうしてもform_withでmodelを指定できなかったので、urlを指定すると、正常にcreateアクションが行えた。
エラーメッセージを表示しようと思いネットで検索をするも、
<%= render 'share/error_messages', model: f.object %>のようなmodelを使用したものばかり。
それならと思い、”保存できなかったら、renderアクションでnewアクションに遷移する"とするとvalidatesをかけているのでうまくいくのでは無いかと思い実証するも、エラーメッセージが表示されないといった状態です。
ここから、エラーメッセージを表示することは可能なのでしょうか?
共通テンプレートでエラーメッセージを表示するやり方も行ってみましたが、そもそもmodelにエラーが起きた時なので使用できませんでした。
そのため、インスタンス変数にerrorsが起きた時ならどうかと思い、実行をしてみましたが、errorsが見つからないというエラーでした。createアクションにもインスタンス変数を定義していたので、これなら成功すると思ったのですが…
どこがおかしいのでしょうか?
お力添えをお願いいたします。
##コード
現在のcreateアクション
def create @training = Training.new(training_params) if @training.save redirect_to '/' else render :new end end
new.html.erbファイル
<h1>練習内容</h1> <div class="parent"> <%= form_with url: trainings_path, id: 'new_training', class: 'new_training', method: :post, local: true do |f| %> <div class="field"> <%= f.label :日付を選択, class: 'date_lavel' %><br> <%= f.date_field :date, class: 'select_date' %> </div> <div class="field"> <%= f.label :"練習メニュー" %> <br> <%= f.text_area :training_menu, autofocus: true, class: "training_menu" %> </div> <div class="field"> <%= f.label :"目的" %><br> <%= f.text_area :purpose, autofocus: true, class: "purpose" %> </div> <div class="field"> <%= f.label :"反省" %><br> <%= f.text_area :introspection, autofocus: true, class: "introspection" %> </div> <div class="register_actions"> <div class="actions"> <%= f.submit "登録", class: "register_btn" %> </div> </div> <% end %> </div>
training.rbのvalidates
class Training < ApplicationRecord belongs_to :user has_many :comments validates :training_menu, presence: true validates :date, presence: true validates :purpose, presence: true end
modelのため使用できなかったエラー表示のための共通テンプレート
<% if @training.errors.any? %> <div class="error-alert"> <ul> <% model.errors.full_messages.each do |message| %> <li class='error-message'><%= message %></li> <% end %> </ul> </div> <% end %>
かなり困っているので、誰かお力ぞえをいただければと思います。
form_withでmodelを指定できれば良いのですが、
No route matches [POST] "/trainings/new" のエラーが発生します。
newにpostメソッドを追加しても、うまくいきませんでした。
#追記
いろいろ変更していると、今度は、paramsは受信して許可もしているのに、idだけが見つからないという状態になっております。
ターミナル画面
コントローラーはこのようになっております。
trainingsコントローラー
お願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/21 09:45
2020/10/21 09:46 編集
2020/10/21 10:14
2020/10/21 10:55
2020/10/21 11:12
2020/10/21 11:21 編集
2020/10/21 11:30
2020/10/21 23:50