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

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

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

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

Q&A

解決済

1回答

3965閲覧

rails form_with内のsubmitボタンが反応しない

Shunpei0217

総合スコア15

Ruby on Rails

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

0グッド

0クリップ

投稿2020/06/18 02:41

編集2020/06/18 02:44

railsのform_with内のsubmitボタンが反応しない

現在作成しているrailsアプリのホーム画面一番下のセクションで、お問い合わせフォームを作成しました。そこでform_withヘルパーを用いているのですが、submitボタンが反応しなくて、その理由が分からない状況です。

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

submitボタンを押しても何も反応がない。
そのため、エラーメッセージも表示されない。

該当のソースコード

関連箇所のみ抜粋
▼お問い合わせフォームがあるhome.html.erb

ruby

1<div class="contact-form-section"> 2 <%= form_with model: @contact, :url => home_confirm_path do |form| %> 3 <% if @contact.errors.any? %> 4 <div class="alert alert-warning"> 5 <ul> 6 <% contact.errors.full_messages.each do |message| %> 7 <li><%= message %></li> 8 <% end %> 9 </ul> 10 </div> 11 <% end %> 12 <%= form.email_field :email, :placeholder => "Email", class: "input-email" %> 13 <%= form.text_field :name, :placeholder => "Name", class: "input-name" %> 14 <%= form.text_field :subject, :placeholder => "Subject", class: "input-subject" %> 15 <%= form.text_area :message, :placeholder => "Message...", class: "textarea-message" %> 16 <%= form.submit "Confirm", class: "submit-send" %> 17 <% end %> 18</div>

▼router.rb

Route

1Rails.application.routes.draw do 2 root "home#index" 3 get 'home/confirm' => redirect("/") 4 get 'home/thanks' => redirect("/") 5 get "projects/index" => "projects#index" 6 get "team/index" => "team#index" 7 get "support/index" => "support#index" 8 get "join/index" => "join#index" 9 get "vrgame/index" => "vrgame#index" 10 get "film/index" => "film#index" 11 12 post "home/confirm" => "home#confirm" 13 post "home/thanks" => "home#thanks" 14 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 15end

▼home.controller.rb

Controller

1class HomeController < ApplicationController 2 def index 3 @contact = Contact.new 4 render :action => 'index' 5 end 6 7 def confirm 8 @contact = Contact.new(contact_params) 9 if @contact.valid? 10 render :action => 'confirm' 11 else 12 render :action => 'index' 13 end 14 end 15 16 def thanks 17 @contact = Contact.new(contact_params) 18 if params[:back] 19 render :action => 'thanks' 20 else 21 ContactMailer.received_mail(@contact).deliver_now 22 render :action => 'thanks' 23 end 24 end 25 26 private 27 def contact_params 28 params.require(:contact).permit(:name, :email, :subject, :message) 29 end 30end

▼Mailer

Mailer

1class ContactMailer < ApplicationMailer 2 3 default from: "example@example.com" 4 default to: "********@gmail.com" #ここは自分のアドレスを入れて試しました。 5 6 def received_email(contact) 7 @contact = contact 8 mail_subject = "You got a message from #{@contact.name}" 9 mail(:subject => mail_subject) 10 end 11end

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

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

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

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

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

guest

回答1

0

ベストアンサー

ajaxではなく普通に送信したい場合、local: trueの指定が必要だと思います。

ruby

1<%= form_with model: @contact, :url => home_confirm_path do |form| %> 2 34 5<%= form_with model: @contact, :url => home_confirm_path, local: true do |form| %>

投稿2020/06/18 03:03

mingos

総合スコア4207

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

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

Shunpei0217

2020/06/18 03:23 編集

早速のご回答ありがとうございます! submitボタンは反応しました!とても助かりました^^ HTMLで普通に送信する場合はlocal: trueが必要ということを認識しておりませんでした。 勉強になりました。 そして、今度は別のエラーが表示されてしまいました。。。 Errno::ECONNREFUSED in HomeController#thanks Extracted source (around line #21): render :action => 'thanks' else ContactMailer.received_email(@contact).deliver_now #この部分です。 render :action => 'thanks' end end Confirmボタンを押して確認画面で正式に管理者のアドレス宛にメール送信したい状況です。。
mingos

2020/06/18 03:26

メールを送信する設定が正しく出来ていないためだと思われます。 Errno::ECONNREFUSEDはおそらくlocalhostに25番ポートで接続しようとしたが、できなかったために起きたエラーだと思います。 開発環境にpostfixなどのSMTPサーバは入っていますか? Linux環境でない場合は、GMailで送るなどの設定が別途必要かもしれません。
Shunpei0217

2020/06/18 03:33

Connection refused - connect(2) for "localhost" port 1025 エラーメッセージ内に、上記のように記載されていました! 開発環境にSMTPサーバを入れるというのは、config/environments/development.rbにgemでSMTPサーバをインストールするという意味でしょうか? 経験が浅いため、この辺りに全く詳しくなく質問が稚拙で申し訳ございません。。
Shunpei0217

2020/06/18 03:34

すいません。gemは関係ないですね。gemfileではないので。。^^;
mingos

2020/06/18 03:36

STMPサーバというのはメールを外部に送信するためのソフトウェアです。 postfixというソフトが有名だと思います。 CentOSなら、yum install postfixというコマンドでインストールが可能です。 MacやWindows環境は申し訳ないですが、分かりません。 その場合は、外部のメールサーバを利用してメールを送る事ができます。 一般的にGMailが無料で使えるからGMailを利用する例が多いようです。 「ActionMailer GMail」などで検索すると設定方法が出てきます。 例えばこのへんとか。 https://qiita.com/zeppekipanda/items/0907ee3312ed9d79c9e8
Shunpei0217

2020/06/18 03:42

ご丁寧に詳細の説明をしていただきありがとうございますm(_ _)m Mac環境なのですが、postfixやgmailあたりの設定を自分で試してみたいと思います。(> <) 最後に1点だけ質問なのですが(何度も本当に申し訳ございません。。)、herokuなどにデプロイしてからもお問い合わせメールの送信機能を持たせるためには、別途本番環境での設定が必要になりますでしょうか?。。
mingos

2020/06/18 03:50 編集

はい。SMTPサーバをそれぞれの環境に用意する方法では、実行環境(開発環境=Mac、本番環境=Heroku)それぞれでメールを送るための準備が必要となります。 一方で、GMailを利用する場合は、SMTPサーバの役割はGMailのサーバになるので 自分で準備する必要はありません。 とりあえず、GMailの方法を試すのが良いと思います。
Shunpei0217

2020/06/18 03:50

承知しました! やるべきことのイメージがわかってきたので、自分で試してみます! 本当に丁寧にありがとうございます(> <)
Shunpei0217

2020/06/19 02:41

たびたび申し訳ございません。 結局メール送信機能が実装出来ず。 新たにこちらで質問投げかけましたので、もしおい時間ございましたらご確認いただけますと幸いです。 https://teratail.com/questions/270997
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問