今日は最後の仕上げのメール送信。フォームで問い合わせた内容を固定のメールアドレスを送信する処理を追加してみる。

まずは、generatorでmailerのmodelを作成する。

CODE:
  1. ruby script/generate mailer ContactMailer result

これにより、
app/views/contact_mailer/result.rhtml
app/models/contact_mailer.rb
というファイルが作成される。まずは、modelのほうを編集してみる。

vi app/models/contact_mailer.rb

RUBY:
  1. class ContactMailer <Iso2022jpMailer
  2.   def result(contact)
  3.     @subject            = 'お問い合わせ'
  4.     @body["contact"] = contact
  5.     @from                = 'test@test.com'
  6.     @recipients        = 'test@test.com'
  7.     @sent_on          = Time.now
  8.     @headers          = {}
  9.   end
  10. end

ぱっと中身をみただけで、だいたい何をしたらよいかわかると思うが、まずはActiveHeartの日本語化の機能を利用するため、ActionMailer::Baseを継承している部分を、Iso2022jpMailerを継承させるように変更する。

あとはプロパティで送信者(from)、あて先(recipients)やsubjectなどを定義してしまう。メールの内容をフォームの値をそのまま使うように

@body["contact"] = contact

で引数でわたってくる、contactオブジェクトをbodyに渡している。

そしてviewのほうはこんな感じです。
vi app/views/contact_mailer/result.rhtml

CODE:
  1. お問い合わせがありました
  2.  
  3. No.:<%= @contact.id %>
  4. お名前:<%= @contact.personal %>
  5. E-Mail:<%= @contact.email %>
  6. お問い合わせ内容:<%= @contact.message %>

そして、このmailerを利用するように、Controllerに呼び出しを書く。
今回は、最後なのでcontrollerのコードをすべて載せておきます。
vi app/controllers/contact_controller.rb

RUBY:
  1. class ContactController <ApplicationController
  2.     model :contact
  3.     service :contact_mailer
  4.  
  5.     def form
  6.         @contact = Contact.new()
  7.     end
  8.     def confirm
  9.         @contact = Contact.new(@params[:contact])
  10.         unless @contact.valid?
  11.             render :action => "form"
  12.         end
  13.     end
  14.     def end
  15.         @contact = Contact.new(@params[:contact])
  16.         @contact.entry = Time.now
  17.         if @contact.save
  18.             email = ContactMailer.create_result(@contact)
  19.             email.set_content_type("text/plain")
  20.             ContactMailer.deliver(email)
  21.         else
  22.             render :action => "form"
  23.         end
  24.     end
  25. end

先頭にcontact_mailerを利用することを宣言し

service :contact_mailer

endメソッドにmailerのオブジェクトを作成し、deliveryメソッドを呼ぶだけで終了だ。

というわけで、はじめてのRailsを体験してみての感想を書いてみる。
良いところ
1.コードを書く量がほんとうに少ない。
2.規約さえ覚えてしまえば、さくさくとコードが書ける。
3.規約のおかげで、どこにどういうコードを書くのかが明確。
4.ソースコードをぱっとみただけで、何をやっているかわかりやすい。
5.ネット上での情報もそこそこ多い。

いまいちなところ
1.viewでformタグを書き換えてしまうと、htmlとしてデザインを確認しにくい。
2.さくらインターネットでcgiとして動かすと明らかに動作が遅い。(Railsの感想ではないが)
3.実際にどういう動作をしているのか、見えにくい。(まあフレームワークなので)

と良いところの目立つ、さすがに今利用が爆発的に増えているフレームワークであることを納得できました。

blogranking←ぽちっとな