サラシボ。

チラシの裏紙サイト

*

【Tips】RubyOnRailsでお問い合わせフォームを作る。

      2017/08/20

     

RubyOnRailsでのお問い合わせフォームの作り方を自分の中で整理する意味を込めて、まとめておく。

成果物

  • 名前、メールアドレス、要件の入力フォームがある。
  • お問い合わせがあった場合、システム管理者にメールにお問い合わせ内容が届く。

環境

Rails 4.2.5
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin15.0]

作り方

config/environment/development.rb

config.action_mailer.raise_delivery_errors = true
  config.action_mailer.default_url_options = { :host => 'localhost:3000' }
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    :address => 'smtp.gmail.com',
    :port => 587,
    :domain => 'example.com',
    :user_name => 'あなたのGoogleアカウント@gmail.com',
    :password => 'パスワード', # Googleが発行する、12桁のアプリケーションパスワード
    :authentication => :login,
    :enable_starttls_auto => true
  }

:passwordは、Googleアカウントのアプリパスワードから発行可能。

セキュリティ⇨二段階認証ON⇨アプリパスワードON⇨アプリパスワード生成

コンソール

コンソールで、mailerを作成する。

rails g mailer クラス名 メソッド名

rails g mailer mail_sender inquiry

モデルを作成する

rails g model Contact name:string email:string message:text

コントローラーを作成する。

rails g controller contacts 

config/routes.rb

resource :contacts, only: [:new, :create]

ルーティングは、newとcreateアクションのみ。

app/controller/contacts_controller.rb

class ContactsController < ApplicationController
  def new
  	@contact = Contact.new
  end

  def create
  	@contact = Contact.new(contact_params)
    MailSender.inquiry(@contact).deliver 
    respond_to do |format|
         if @contact.save
                    format.html { redirect_to home_top_path, notice: 'お問い合わせメールが送信されました。' }
         else
           format.html { render action: 'new' }
         end
       end
  end

    private
    def contact_params
      params.require(:contact).permit(:email, :name, :message)
    end
end

deliverメソッドを使って、@contactを渡す。

セーブできなかった場合は、newアクション呼び出し。

app/views/contacts/new.html.erb

<%= form_for @contact do |f| %>
 


<div>
    <%= f.label :name %>
    <%= f.text_field :name, :class => "form-control" %>
  </div>




<div>
    <%= f.label :email %>
    <%= f.email_field :email, :class => "form-control" %>
  </div>




<div>
    <%= f.label :message %>
    <%= f.text_area :message, :class => "form-control" %>
  </div>




<div>
       <%= f.submit class: "btn", :class => "form-control btn-info" %>
  </div>


<% end %>

メーラー系

app/mailer/mail_sender.rb

class MailSender < ApplicationMailer
      
  def inquiry(contact)
    @contact = contact
    
    mail to: "送信先URL"
  end
end

app/view/mail_sender/inquiry.text.erb

Webサイトからお問い合わせがありました。
 
--------------------------
Name: <%= @contact.name %>
Email: <%= @contact.email %>
Message:
<%= @contact.message %>
--------------------------

完成です:D

最後に

クラスもつけてない、ほんと単純な形。

メモ。修正点発見、課題完成したら、更新する。

なぜかルーティングでつまづいた。(笑)
contacts_pathが定義されてないとか出たんだけど、あれは一体何だったのであろうか。

参考サイト

Ruby on Rails 4 でお問い合わせフォーム(確認画面つき)を作成する
Ruby on Railsでメールフォームを作ってみる(2)

 - RubyOnRails ,