今日は最後の仕上げのメール送信。フォームで問い合わせた内容を固定のメールアドレスを送信する処理を追加してみる。
まずは、generatorでmailerのmodelを作成する。
-
ruby script/generate mailer ContactMailer result
これにより、
app/views/contact_mailer/result.rhtml
app/models/contact_mailer.rb
というファイルが作成される。まずは、modelのほうを編集してみる。
vi app/models/contact_mailer.rb
-
class ContactMailer <Iso2022jpMailer
-
def result(contact)
-
@subject = 'お問い合わせ'
-
@body["contact"] = contact
-
@from = 'test@test.com'
-
@recipients = 'test@test.com'
-
@sent_on = Time.now
-
@headers = {}
-
end
-
end
ぱっと中身をみただけで、だいたい何をしたらよいかわかると思うが、まずはActiveHeartの日本語化の機能を利用するため、ActionMailer::Baseを継承している部分を、Iso2022jpMailerを継承させるように変更する。
あとはプロパティで送信者(from)、あて先(recipients)やsubjectなどを定義してしまう。メールの内容をフォームの値をそのまま使うように
@body["contact"] = contact
で引数でわたってくる、contactオブジェクトをbodyに渡している。
そしてviewのほうはこんな感じです。
vi app/views/contact_mailer/result.rhtml
-
お問い合わせがありました
-
-
No.:<%= @contact.id %>
-
お名前:<%= @contact.personal %>
-
E-Mail:<%= @contact.email %>
-
お問い合わせ内容:<%= @contact.message %>
そして、このmailerを利用するように、Controllerに呼び出しを書く。
今回は、最後なのでcontrollerのコードをすべて載せておきます。
vi app/controllers/contact_controller.rb
-
class ContactController <ApplicationController
-
model :contact
-
service :contact_mailer
-
-
def form
-
@contact = Contact.new()
-
end
-
def confirm
-
@contact = Contact.new(@params[:contact])
-
unless @contact.valid?
-
render :action => "form"
-
end
-
end
-
def end
-
@contact = Contact.new(@params[:contact])
-
@contact.entry = Time.now
-
if @contact.save
-
email = ContactMailer.create_result(@contact)
-
email.set_content_type("text/plain")
-
ContactMailer.deliver(email)
-
else
-
render :action => "form"
-
end
-
end
-
end
先頭にcontact_mailerを利用することを宣言し
service :contact_mailer
endメソッドにmailerのオブジェクトを作成し、deliveryメソッドを呼ぶだけで終了だ。
というわけで、はじめてのRailsを体験してみての感想を書いてみる。
良いところ
1.コードを書く量がほんとうに少ない。
2.規約さえ覚えてしまえば、さくさくとコードが書ける。
3.規約のおかげで、どこにどういうコードを書くのかが明確。
4.ソースコードをぱっとみただけで、何をやっているかわかりやすい。
5.ネット上での情報もそこそこ多い。
いまいちなところ
1.viewでformタグを書き換えてしまうと、htmlとしてデザインを確認しにくい。
2.さくらインターネットでcgiとして動かすと明らかに動作が遅い。(Railsの感想ではないが)
3.実際にどういう動作をしているのか、見えにくい。(まあフレームワークなので)
と良いところの目立つ、さすがに今利用が爆発的に増えているフレームワークであることを納得できました。
Check Tweet

