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)
コメントを残す