Receiving Email (ActionMailer) with Rails to process image attachments
I am trying to parse an email sent to my app server. It should read the email to find the user by email then add the photo to the user's photo models Here is what I have so far. What am I doing wrong?
class Mailman < ActionMailer::Base
def receive(email)
logger.info("Got an email about: #{email.subject}")
if (@user = User.find_by_email(email.from))
if email.has_attachments?
for attachment in email.attachments
#...@user.photos.create(:data_file_name => attachment.original_filename,
# :data_content_type => attachment.content_type, :data_file_size => attachment.size,
# :data_updated_at => Time.now.to_datetime)
# @user.photos << attachment
# I don't think this is the right way to do this...
end
end
else
logger.info("No user found with email: #{email.from}")
end
end
end
class User < ActiveRecord::Base
acts_as_authentic
has_attached_file :avatar
has_many :photos, :dependent => :destroy
accepts_nested_attributes_for :photos
# What does this do?
end
class Photo < ActiveRecord::Base
belongs_to :user
has_attached_file :data
end
class AddAttachmentsDataToPhoto < ActiveRecord::Migration
def self.up
add_column :photos, :data开发者_运维知识库_file_name, :string
add_column :photos, :data_content_type, :string
add_column :photos, :data_file_size, :integer
add_column :photos, :data_updated_at, :datetime
end
def self.down
remove_column :photos, :data_file_name
remove_column :photos, :data_content_type
remove_column :photos, :data_file_size
remove_column :photos, :data_updated_at
end
end
I know this is a little late but for anyone else coming across this I wrote a blog post explaining how you can use paperclip to save attachments from incoming emails in Rails 3.
You didn't mention it, but it looks like you're using Paperclip. According to the docs, you need to assign the file to the Attachment. In your loop, what if you did this:
@user.photos.create(:data => attachment)
精彩评论