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... ]