質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

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

Ruby

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

Q&A

解決済

1回答

1795閲覧

Rails5で問い合わせフォームを別のViewsへ表示させたいのですがエラーで進みません。

matcha358

総合スコア15

Ruby on Rails 5

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

Ruby

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

0グッド

0クリップ

投稿2018/07/28 09:14

編集2018/07/28 09:54

問い合わせフォームを作成、動作しました。
別の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

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

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

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

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

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

takahashim

2018/07/28 14:20

素朴な疑問ですが、「別のViewsに表示させたい」という理由は何なんでしょうか? 違うモデル(テーブル)に保存させたいのであれば同じようなモデルやビューを作ってコピー&置換した方がいいでしょうし、同じモデルに保存したいならそれこそredirectやroutingの変更でもいいような気がするのでした。
matcha358

2018/07/29 04:08

>違うモデル(テーブル)に保存させたいのであれば同じようなモデルやビューを作ってコピー&置換した方がいいでしょうし。→たしかにそうなのですが、Railsに同じコードを書かないのが理念とか何かあった様な気がしまして同じ問い合わせフォームであれば、別のモデルのViewsに書き方を変えれば表示できるのではと思いましてご質問した次第となりますが、伝わるでしょうか?
takahashim

2018/07/29 08:32

なるほどです。でも、モデルが違えば「同じコード」ということにはならないので、別途書いたほうが都合がよいんではないかと思いました。
guest

回答1

0

ベストアンサー

上の方にも書きましたが、モデルが違う場合はビューのindex.html.erbを再利用するのではなく、別途記述した方がよいでしょう。

共通化した方がよいものは、例えばビューであればどのページでも表示されるヘッダ・フッタ・ナビゲーションとかですね。その辺はlayouts/application.html.erbを使ったり、適宜partialを使ったりするとよいのではないかと思います。

投稿2018/07/29 08:37

takahashim

総合スコア1877

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

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

matcha358

2018/07/29 23:32

>モデルが違う場合はビューのindex.html.erbを再利用するのではなく、別途記述した方がよいでしょう。 >共通化した方がよいものは、例えばビューであればどのページでも表示されるヘッダ・フッタ・ナビゲーションとかですね。 なるほどありがとうございます。 同じ問い合わせフォームを使うならなら、index.html.erb内の問い合わせフォームで書いたコードを コピペすればよいかなと考えておりましたが、「同一モデル内で同じことをなるべく書かない様に」と言うことですね。 ご教授頂きましてありがとうございます。 一点疑問なのですが、なぜ違うモデルなら別途書いた方が良いのしょうか? こういうことやるときに、不便だよとか、不都合が生じるとかなにか例などあるでしょうか? もし御座いましたら、例など頂けますと理解が深まりますので ご助言頂けますと幸いです。 重ねてありがとうございます。
takahashim

2018/07/30 01:09

「同一モデル内で同じことをなるべく書かない様に」というより「異なるモデルに対するビューのコードでは、共通化を頑張らなくてもよい」というところでしょうか。 一般的に、同じだったり似ていたりする記述が複数あるとき、共通化した方がよいのは、片方に変更があればもう片方にも変更を入れないといけない場合です。 異なるモデルに対するビューについては、片方が変わってももう片方はそのままにしたい、という場合もありそうかなと思いました。
matcha358

2018/07/30 01:31

>「異なるモデルに対するビューのコードでは、共通化を頑張らなくてもよい」というところでしょうか。 理解出来ました。 >Railsの話はDRY原則ですよね。 はいそうです。読みました。ありがとうございます。 たしかにモデル単位などでまとまっている方があとで誰かに渡すときや何年後かに修正するとき 一塊と思えば修正する部分がわかりやすいです。 なるほど。大変勉強になりました。 ご教授頂きましてありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問