問い合わせフォームを作成、動作しました。
別のViewsに表示させたいのですが、エラーが出て表示できません。
どこかに belongs_toを付ければよいのか?と思いましたが、
どのようにすれば、別のVeiwsに表示できるようになるでしょうか?
ご教授頂けますと幸いです。
エラー内容は ArgumentError in Pages#index First argument in form cannot contain nil or be empty <%= form_for @inquiry, :url => inquiry_confirm_path do |f| %>
表示させたいフォームの様は下記になります。
app/views/inquiry/index.html.erb
erb
1 <div class="inquiryContent"> 2 <%= form_for @inquiry, :url => inquiry_confirm_path do |f| %> 3 <% if @inquiry.errors.any? %> 4 <div class="alert alert-danger" role="alert"> 5 <strong>入力内容にエラーがあります</strong> 6 <ul> 7 <% @inquiry.errors.each do |attr, msg| %> 8 <li><%= msg %></li> 9 <% end %> 10 </ul> 11 </div> 12 <% end %> 13 <div class="row"> 14 <div class="col-sm-4">名前<span class="text-danger">(必須)</span></div> 15 <div class="col-sm-8"><%= f.text_field :name, class: 'form-control mb-2' %></div> 16 <div class="col-sm-4">メールアドレス<span class="text-danger">(必須)</span></div> 17 <div class="col-sm-8"><%= f.text_field :email, class: 'form-control mb-2' %></div> 18 <div class="col-sm-4">お問い合わせ内容</div> 19 <div class="col-sm-8"><%= f.text_area :message, class: 'form-control mb-2', rows: '6' %></div> 20 </div> 21 <%= f.submit '確認', class: 'btn btn-block btn-success' %> 22 <% end %> 23 </div>
app/views/pages/index.html.erb
app/views/inquiry/index.html.erbの内容を ここに表示したい。
controller/inquiry_controllder.eb
ruby
1class InquiryController < ApplicationController 2 def index 3 # 入力画面を表示 4 @inquiry = Inquiry.new 5 render :action => 'index' 6 end 7 8 def confirm 9 # 入力値のチェック 10 @inquiry = Inquiry.new(inquiry_params) 11 if @inquiry.valid? 12 # OK。確認画面を表示 13 render :action => 'confirm' 14 else 15 # NG。入力画面を再表示 16 render :action => 'index' 17 end 18 end 19 20 def thanks 21 # メール送信 22 @inquiry = Inquiry.new(inquiry_params) 23 InquiryMailer.received_email(@inquiry).deliver 24 25 # 完了画面を表示 26 render :action => 'thanks' 27 end 28 29 private 30 def inquiry_params 31 params.require(:inquiry).permit(:name, :email, :message) 32 end 33end
model/inquiry.rb
ruby
1class Inquiry 2 include ActiveModel::Model 3 4 attr_accessor :name, :email, :message 5 6 validates :name, :presence => {:message => '名前を入力してください'} 7 validates :email, :presence => {:message => 'メールアドレスを入力してください'} 8end
pages/index.html.erb
素朴な疑問ですが、「別のViewsに表示させたい」という理由は何なんでしょうか? 違うモデル(テーブル)に保存させたいのであれば同じようなモデルやビューを作ってコピー&置換した方がいいでしょうし、同じモデルに保存したいならそれこそredirectやroutingの変更でもいいような気がするのでした。
>違うモデル(テーブル)に保存させたいのであれば同じようなモデルやビューを作ってコピー&置換した方がいいでしょうし。→たしかにそうなのですが、Railsに同じコードを書かないのが理念とか何かあった様な気がしまして同じ問い合わせフォームであれば、別のモデルのViewsに書き方を変えれば表示できるのではと思いましてご質問した次第となりますが、伝わるでしょうか?
なるほどです。でも、モデルが違えば「同じコード」ということにはならないので、別途書いたほうが都合がよいんではないかと思いました。
回答1件
あなたの回答
tips
プレビュー