[前][次][番号順一覧][スレッド一覧]

rails:884

From: Kazuhiro Yoshida <moriq@m...>
Date: Thu, 19 Jan 2006 14:34:44 +0900
Subject: [rails:884] Re: ActionMailer(receive)の使い方について

もりきゅうです。

N.T. wrote:
> http://wiki.rubyonrails.com/rails/pages/HowToReceiveEmailsWithActionMailer

これはActionMailerのREADMEを元に書かれているようなのですが、Pageの定義に
ついては省略されているようです。

>       page = Page.find_by_address(email.to.first)

このPageはActiveRecord::Baseを継承して作るようです。
# find_by_* はActiveRecordで使われるメソッドなので
つまり、事前にデータベースとモデルクラスの設定が必要です。

>       page.emails.create(
>         :subject => email.subject,
>         :body => email.body
>       )
>
>       if email.has_attachments?
>         for attachment in email.attachments
>           page.attachments.create({
>             :file => attachment,
>             :description => email.subject
>           })
>         end
>       end

このコードを見ると、必要なテーブルとカラムは次のようになると思います。
ここではmigrationを用いてDBテーブルを定義してみます。
# 事前にdb/database.ymlを設定しておく必要があります

$ script/generate migration CreateTables
これでマイグレーション用の雛形ファイルが作られます。
次のように編集します。

db/migrate/001_create_tables.rb:
class CreateTables < ActiveRecord::Migration
  def self.up
    create_table(:pages) do |t|
      t.column :address, :string
    end
    create_table(:emails) do |t|
      t.column :page_id, :integer
      t.column :subject, :string
      t.column :body, :string
    end
    create_table(:attachments) do |t|
      t.column :page_id, :integer
      t.column :file, :binary
      t.column :description, :string
    end
  end

  def self.down
    drop_table :attachments
    drop_table :emails
    drop_table :pages
  end
end

そして、次のようにrakeを実行すると
$ rake migrate
実際にDBテーブルが定義されます。

対応するモデルを作ります。
$ script/generate model Page
$ script/generate model Email
$ script/generate model Attachment

リレーションを宣言します。
app/models/page.rb:
class Page < ActiveRecord::Base
  has_many :emails
  has_many :attachments
end

これで
> %> cat mail.txt | ./script/runner 'SupportMail.receive(STDIN.read)'
これが動作すると思います。


attachmentはStringIOなので
>             :file => attachment,
これはあまり意味がないと思いますが、multipartの確認はできます。
# 実際のデータは attachment.read で読めます



--
ML: rails@r...
使い方: http://QuickML.com/

[前][次][番号順一覧][スレッド一覧]

       883 2006-01-18 17:10 [fwkz0826@m...       ] ActionMailer(receive)の使い方について   
->     884 2006-01-19 06:34 ┗[moriq@m...          ]                                       
       885 2006-01-19 06:43  ┣[moriq@m...          ]                                     
       892 2006-01-19 07:15  ┗[moriq@m...          ]                                     
       896 2006-01-20 00:45   ┗[fwkz0826@m...       ]