前提・実現したいこと
Railsで確認画面を表示するお問い合わせページを作成しています。
new(情報登録画面)→ confirm(内容確認画面)→ create(送信完了画面)
という流れで実装しております。
この流れは正常に行くのですが、DBの中身がNULLになってしまいます。
原因が分からずつまづいてしまっているので、皆様のお力を頂戴したいです。
発生している問題
confirm → createに移動する際、おそらく@contactのparams[:name, :email, :text]の情報がnilになっている。
そのためDBの上記の中身がNULLになってしまう。
該当のソースコード
routes.rb
ruby
1 get 'contacts' => 'contacts#new' #問い合わせトップ 2 post 'contacts/confirm' => 'contacts#confirm' #確認画面 3 post 'contacts/create' => 'contacts#create' #送信完了画面
contacts_controller.rb
ruby
1class ContactsController < ApplicationController 2 3 def new 4 @contact = Contact.new 5 end 6 7 def confirm 8 @contact = Contact.new(contact_params) 9 render :new if @contact.invalid? 10 end 11 12 def create 13 @contact = Contact.new(contact_params) 14 15 if params[:back] 16 render :new 17 return 18 end 19 20 if params[:post] 21 @contact.save 22 return 23 end 24 25 end 26 27 private 28 def contact_params 29 params.permit(:name, :email, :text) 30 end 31end
new.html.erb
erb
1<%= form_with(model: @contact, local: true, url: {action: 'confirm'}) do |form| %> 2 <% if @contact.errors.any? %> 3 <div id="error_explanation"> 4 <h2><%= pluralize(post.errors.count, "error") %> prohibited this post from being saved:</h2> 5 6 <ul> 7 <% @contact.errors.full_messages.each do |message| %> 8 <li><%= message %></li> 9 <% end %> 10 </ul> 11 </div> 12 <% end %> 13 14 <div class="field"> 15 <%= form.label :name %> 16 <%= form.text_field :name %> 17 </div> 18 19 <div class="field"> 20 <%= form.label :email %> 21 <%= form.text_field :email %> 22 </div> 23 24 <div class="field"> 25 <%= form.label :text %> 26 <%= form.text_area :text %> 27 </div> 28 29 <div class="actions"> 30 <%= form.submit "確認画面へ" %> 31 </div> 32<% end %>
confirm.html.erb
erb
1<%= form_for @contact, url: contacts_create_path do |f| %> 2 <%= @contact.name %> 3 <%= @contact.email %> 4 <%= @contact.text %> 5 <div class="actions"> 6 <%= f.submit '投稿画面に戻る', name: 'back' %> 7 </div> 8 <div class="actions"> 9 <%= f.submit '投稿する', name: 'post'%> 10 </div> 11<% end %>
試したこと
contacts_controller.rb
のcreateアクション内にbinding.pryを入れて確認したところ、@contactの中身が全てnilでした。
form_withをform_tagやform_forなどに書き換えてみたり、バリデーションを入れたり取ったりしましたが変化がありませんでした。
補足情報(FW/ツールのバージョンなど)
rails -v 5.2.1/ruby -v 2.5.1です。
DBに追加したカラムは以下の通りです。
t.string :name
t.string :email
t.text :text
その他必要な情報があれば教えてください。
よろしくお願いします!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/24 16:25
2020/04/24 22:58
2020/04/25 06:14
2020/04/25 06:17
2020/04/25 06:23
2020/04/25 06:28
2020/04/25 06:43