Home » Programing, Ruby » Ruby on Railsでフォームを作成する#5(メール送信)

Check     このエントリーをはてなブックマークに追加

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

まずは、generatorでmailerのmodelを作成する。
[code]
ruby script/generate mailer ContactMailer result
[/code]
これにより、
app/views/contact_mailer/result.rhtml
app/models/contact_mailer.rb
というファイルが作成される。まずは、modelのほうを編集してみる。

vi app/models/contact_mailer.rb
[ruby]
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 [/ruby] ぱっと中身をみただけで、だいたい何をしたらよいかわかると思うが、まずはActiveHeartの日本語化の機能を利用するため、ActionMailer::Baseを継承している部分を、Iso2022jpMailerを継承させるように変更する。 あとはプロパティで送信者(from)、あて先(recipients)やsubjectなどを定義してしまう。メールの内容をフォームの値をそのまま使うように

@body["contact"] = contact

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

そしてviewのほうはこんな感じです。
vi app/views/contact_mailer/result.rhtml
[code]
お問い合わせがありました

No.:<%= @contact.id %>
お名前:<%= @contact.personal %>
E-Mail:<%= @contact.email %>
お問い合わせ内容:<%= @contact.message %>
[/code]

そして、このmailerを利用するように、Controllerに呼び出しを書く。
今回は、最後なのでcontrollerのコードをすべて載せておきます。
vi app/controllers/contact_controller.rb
[ruby]
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
[/ruby]
先頭にcontact_mailerを利用することを宣言し

service :contact_mailer

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

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

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

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

Check     このエントリーをはてなブックマークに追加
タグ: