Forum: Ruby on Rails Access from common class

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
8ea35d7f8980ea114754babcab8189af?d=identicon&s=25 Konstantin (Guest)
on 2008-12-17 18:18
(Received via mailing list)
Hello!

I have made a common class and put it to the /lib folder of my Rails
application.
Now I have some problems with access to:

1. Mailers
Call to SupportMailer.send_activation_email gives an error:
NoMethodError (undefined method `send_activation_email' for
SupportMailer:Class):

Ok, I have changed my SupportMailer class - give a prefix to the
function
function send_activation_email -> function self.send_activation_email
But in this case the Mailer doesn't see other models and gives an
error:
   NoMethodError (You have a nil object when you didn't expect it!
   You might have expected an instance of ActiveRecord::Base.
   The error occurred while evaluating nil.[]=):
       /app/models/support_mailer.rb:14:in `send_activation_email'

How can I access mailers?

2. Functions from application.rb
I have added a function (send_sms) to the ApplicationController, but
how can I access it from common class in /lib folder?
I have tried:
send_sms
ApplicationController::send_sms
But in both cases I have got  NoMethodError

How can I access this global function?

I'm lost in all the dependencies and don't know where to place global
functions and classes and how to connect from them to another parts of
the application....
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2008-12-17 18:56
(Received via mailing list)
On 17 Dec 2008, at 17:17, Konstantin wrote:

> SupportMailer:Class):
>
That's not how mailers work. Typically your mailer method would be
called activation_email (and it must be an instance method - not a
class method)
Rails then magically lets you do
SupportMailer.deliver_activation_email /
SupportMailer.create_activation_email

> How can I access this global function?
It's not a global function. It's an instance method added to all
controllers
>
>
> I'm lost in all the dependencies and don't know where to place global
> functions and classes and how to connect from them to another parts of
> the application....

in foo.rb
class Foo
   def self.some_function
   end
end

call Foo.some_function anywhere you want (you could of course add the
method to a more appropriate model class if there is one)

Fred
8ea35d7f8980ea114754babcab8189af?d=identicon&s=25 Konstantin (Guest)
on 2008-12-17 22:38
(Received via mailing list)
> It's not a global function. It's an instance method added to all
> controllers

Ok, but I want to render a template in this function.
How can I do that if I put it outside the controller (for example,
into a separate class in a /lib folder)?

Other answers are really helpful, thank you :)
Actually I still cannot force my Mailer to work, it reports about
"undefined method `activation_email'", although this method exists and
is an instance (not class) method....
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2008-12-17 22:44
(Received via mailing list)
On Dec 17, 9:37 pm, Konstantin <rasf...@gmail.com> wrote:
> is an instance (not class) method....
What are you doing to try and send an email. It should be
SupportMailer.deliver_activation_email.

Fred
This topic is locked and can not be replied to.