views:

396

answers:

1

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 
        #[email protected](: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
A: 

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)
orangechicken