#解決したいこと
newアクションで値を送信して、正常な値でなければエラーメッセージが表示されるようにしたいです。
方法として、共通のテンプレートを使用しております。
それに、newアクションで投稿した情報がcreateアクションでIDだけ保存されないという現象も発生しておりました。それは、otional: trueで解決できました。おそらく今回のものには関係ないかと思うのですが…
以下が、今回使用している関係があるかと思われるコードになります。
#コード
share/_errors.message.html.erb
<% 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 %>
trainings/new.html.erb
<h1>練習内容</h1> <div class="parent"> <%= form_with model: @training, id: 'new_training', class: 'new_training',local: true do |f| %> <%= render 'share/error_messages', model: f.object %> <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>
trainings_controller
class TrainingsController < ApplicationController before_action :comment_set, only: [:edit, :show] def new @training = Training.new end def create @training = Training.create(training_params) if @training.save redirect_to '/' else redirect_to request.referer end end def update @training = Training.find(params[:id]) @training.update(update_training_params) end def destroy training = Training.find(params[:id]) if training.user_id == current_user.id training.destroy redirect_to '/' end end private def training_params params.require(:training).permit(:date, :training_menu, :purpose, :introspection).merge(user_id: current_user.id) end def update_training_params params.require(:training).permit(:date, :training_menu, :purpose, :introspection).merge(user_id: current_user.id) end def comment_set @training = Training.find(params[:id]) @comment = Comment.new @comments = @training.comments.includes(:user) end end
trainings.rb
class Training < ApplicationRecord belongs_to :user belongs_to :calendar, optional: true has_many :comments validates :training_menu, presence: true validates :date, presence: true validates :purpose, presence: true end
マイグレーションファイル
class CreateTrainings < ActiveRecord::Migration[6.0] def change create_table :trainings do |t| t.date :date , null: false t.text :training_menu , null: false t.text :purpose , null: false t.text :introspection t.references :user , foreign_key: true t.timestamps end end end
以上になります。
大変お手数おかけしますがご確認よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/22 05:08