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

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

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

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

2回答

2222閲覧

【Ruby on rails】問い合わせフォームの作成途中でエラーが発生してしまっております。

Tomoaki_Fukuda

総合スコア75

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2017/01/04 12:26

###前提・実現したいこと
Ruby on rails にて野球のイベントサイトを制作しております。
その機能の一つとして、問い合わせフォーム(メールにて管理者に内容を送信できる)の実装を試みておりますが、
下記のエラーメッセージをどうしても解決することができません。何かアドヴァイス頂けないでしょうか?
何卒よろしくお願い致します。

###発生している問題・エラーメッセージ

NameError in Inquiry#index Showing /Users/TOMOAKI/baseball/app/views/inquiry/index.html.erb where line #1 raised: undefined local variable or method `inquiry_confirm_path' for #<#<Class:0x007f9714acab18>:0x007f97198b7038> Extracted source (around line #1): <%= form_for @inquiry, :url => inquiry_confirm_path do |f| %> <div class="page-header"> <h1>お問い合わせ</h1> </div> <% if @inquiry.errors.any? %> Rails.root: /Users/TOMOAKI/baseball Application Trace | Framework Trace | Full Trace app/views/inquiry/index.html.erb:1:in `_app_views_inquiry_index_html_erb___2518246512477406555_70143411361580' app/controllers/inquiry_controller.rb:5:in `index'
こちらもご確認下さい。 [https://gyazo.com/4e004409b68443075e064b88ef1aa344](https://gyazo.com/4e004409b68443075e064b88ef1aa344)

###Views>inquiry>index.html.erb

ruby

1<%= form_for @inquiry, :url => inquiry_confirm_path do |f| %> 2 <div class="page-header"> 3 <h1>お問い合わせ</h1> 4 </div> 5 6 <% if @inquiry.errors.any? %> 7 <div class="alert alert-danger" role="alert"> 8 <strong>入力内容にエラーがあります</strong> 9 <ul> 10 <% @inquiry.errors.each do |attr, msg| %> 11 <li><%= msg %></li> 12 <% end %> 13 </ul> 14 </div> 15 <% end %> 16 17 <table class="table"> 18 <tr> 19 <th>名前<span class="text-danger">(必須)</span></th> 20 <td><%= f.text_field :name %></td> 21 </tr> 22 <tr> 23 <th>メールアドレス<span class="text-danger">(必須)</span></th> 24 <td><%= f.text_field :email %></td> 25 </tr> 26 <tr> 27 <th>お問い合わせ内容</th> 28 <td><%= f.text_area :contents %></td> 29 </tr> 30 </table> 31 <%= f.submit '確認', class: 'btn btn-primary' %> 32<% end %>

###Views>inquiry>confirm.html.erb

ruby

1<div class="page-header"> 2 <h1>お問い合わせ</h1> 3</div> 4 5<%= form_for @inquiry, :url => inquiry_thanks_path do |f| %> 6 <table class="table"> 7 <tr> 8 <th>名前</th> 9 <td> 10 <%= f.hidden_field :name %> 11 <%= @inquiry.name %> 12 </td> 13 </tr> 14 <tr> 15 <th>メールアドレス</th> 16 <td> 17 <%= f.hidden_field :email %> 18 <%= @inquiry.email %> 19 </td> 20 </tr> 21 <tr> 22 <th>お問い合わせ内容</th> 23 <td> 24 <%= f.hidden_field :contents %> 25 <%= simple_format(@inquiry.contents) %> 26 </td> 27 </tr> 28 </table> 29 <%= f.submit '送信', :class => 'btn btn-primary' %> 30<% end %>

###Views>inquiry>thanks.html.erb

ruby

1<div class="page-header"> 2 <h1>お問い合わせ</h1> 3</div> 4<p> 5 お問い合わせいただきありがとうございました。 6</p>

###inquiry_controller.rb

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(params[:inquiry]) 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(params[:inquiry]) 23 InquiryMailer.received_email(@inquiry).deliver 24 25 # 完了画面を表示 26 render :action => 'thanks' 27 end 28end

###models>inquiry.rb

ruby

1class Inquiry < ActiveRecord::Base 2 3class Inquiry 4include ActiveModel::Model 5attr_accessor :name, :email, :content 6 validates :name, :presence => {:message => '名前を入力してください'} 7 validates :email, :presence => {:message => 'メールアドレスを入力してください'} 8end 9 10end

###config>routes.rb

ruby

1Rails.application.routes.draw do 2 resources :layouts 3 get '/top' => 'home#top' 4 get 'inquiry' => 'inquiry#index' # 審判依頼入力画面 5 post 'inquiry/confirm' => 'inquiry#confirm' # 審判依頼確認画面 6 post 'inquiry/thanks' => 'inquiry#thanks' # 審判依頼送信完了画面 7end

###db>migrate>20170104114543_create_inquiries.rb

ruby

1class CreateInquiries < ActiveRecord::Migration 2 def change 3 create_table :inquiries do |t| 4 t.string :name 5 t.string :team_name 6 t.date :requested_date 7 t.time :requested_time 8 t.string :ground_name 9 t.string :ground_adress 10 t.string :email 11 t.integer :phonenumber 12 t.string :weburl 13 t.string :opponent_name 14 t.string :tournament_name 15 t.text :contents 16 17 t.timestamps null: false 18 end 19 end 20end

###制作にあたり参考にしたサイト
https://www.imd-net.com/column/1731/
上記のサイトを見ながら作成いたしました。

何卒ご教示の程、よろしくお願い致します。
以上

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

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

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

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

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

guest

回答2

0

エラーメッセージは inquiry_confirm_path が定義されていないことを伝えているので、 inquiry_confirm_pathが定義されていることを確認してください。
ブラウザで未定義のURLを入力すれば、デバッグ画面でroutesを表示できます。

イメージ説明

【補足】

確認のため質問にある以下のコードをコピペして動かしてみたところ、問題なく画面表示できました。
質問に記入していコードは実際に動かしているコードなのでしょうか。

config/routes.rb app/models/inquiry.rb app/controllers/inquiry_controller.rb app/views/inquiry/index.html.erb

イメージ説明

投稿2017/01/05 15:24

tkmtmkt

総合スコア1800

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

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

Tomoaki_Fukuda

2017/01/07 02:57

ご回答ありがとうございます!無事に解決することが出来ました。
guest

0

ベストアンサー

inquiry_confirm_pathという変数がつかえないとのことですが、
Railsの規則上confirm_inquiry_pathが正しいのかな。。。と思います。

rake routesコマンドでご確認下さい。

間違えていたらすみません・・・;;

投稿2017/01/04 13:43

編集2017/01/04 13:52
devsx

総合スコア173

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

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

Tomoaki_Fukuda

2017/01/04 23:18

ご回答誠にありがとうございます!! confirm_inquiry_pathに修正してトライしましたが、やはりこちらでも同様のエラーが発生してしまいました。その他に対処法はございませんでしょうか?
devsx

2017/01/06 01:58

他の手段としては、post 'inquiry/confirm' => 'inquiry#confirm' as 'inquiry_confirm' と定義すればinquiry_confirm_pathが使えるようになるはずです。 ただ、自動でinquiry_confirm_pathが定義されない原因が分からないので、その点調査してみたほうが良いかもしれません。(私もよくわかっていません><)
Tomoaki_Fukuda

2017/01/06 06:42

ご教示ありがとうざいます。 早速試して見たいと思いますが、 post 'inquiry/confirm' => 'inquiry#confirm' as 'inquiry_confirm' はどのファイルのどの場所に保管するべきでしょうか? 基本的な質問内容で申し訳ありません。
devsx

2017/01/12 01:33 編集

ルーティングを定義している config/routes.rb です。 post 'inquiry/confirm' => 'inquiry#confirm' # 審判依頼確認画面 ↓ post 'inquiry/confirm' => 'inquiry#confirm', as: 'inquiry_confirm' を書きのように定義してあげると、asに指定した文字列に_pathをつけた変数がビューで利用出来るはずです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問