I have an actionmailer script that happily processes an inbox. It is
called via script & reads emails & grabs the attachments for further
processing
I want to be able to access a method [process_attachment] in
app/controllers/application.rb, but the mailman routine does not appear
to be able to access it. I’ve tried both including environment.rb &
app/controllers/application.rb but still get the error - undefined
method ‘process_attachment’
Is there anyway to do this, or do I have to move the logic somewhere
else…??
def receive(email)
email.attachments.each do |attachment|
inbound = Inbound.new
inbound.attachment = attachment
process_attachment(inbound)
end
end
end
I’m not sure if this is the best method, its probably not even a good
method :] but it’s something you could try in the meantime
extract the method into a separate file into your /lib directory, aka.
/lib/my_truly_global_methods.rb
Then require this file in either your environment.rb, or (less
blasphemously) in your mailer class.
Doesn’t feel very elegant, I know, but I’m not sure if something like
helper_method exists for mailers…
Your problem is, that ApplicationController is the parent class of all
Controllers in a Ruby on Rails Application.
But you extend ActionMailer and ActionMailer doesn’t extends
ApplicationController.
You could do the following
class Mailman < ActionMailer::Base
def receive(email)
application = ApplicationController.new
email.attachments.each do |attachment|
inbound = Inbound.new
inbound.attachment = attachment
application.process_attachment(inbound)
end
end
end
I’m not sure if this is an elegant solution but it should work.
Otherwise put process_attachement in any class and you can instantiate
this instead of ApplicationController.
Your problem is, that ApplicationController is the parent class of all
Controllers in a Ruby on Rails Application.
But you extend ActionMailer and ActionMailer doesn’t extends
ApplicationController.
You could do the following
class Mailman < ActionMailer::Base
def receive(email)
application = ApplicationController.new
email.attachments.each do |attachment|
inbound = Inbound.new
inbound.attachment = attachment
application.process_attachment(inbound)
end
end
end
I’m not sure if this is an elegant solution but it should work.
Otherwise put process_attachement in any class and you can instantiate
this instead of ApplicationController.
Cheers, Simon
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.