# Module issue

**URL:** <https://www.ruby-forum.com/t/module-issue/78794>\
**Category:** Ruby\
**Created:** [December 8, 2006, 5:57pm UTC](https://www.ruby-forum.com/t/module-issue/78794 "2006-12-08T17:57:20Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![vinsonizer](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/848f3c/32.png) [@vinsonizer](https://www.ruby-forum.com/u/vinsonizer)\
**Post date:** [December 8, 2006, 5:57pm UTC](https://www.ruby-forum.com/t/module-issue/78794/1 "2006-12-08T17:57:20Z")

</div>

Disclaimer: Ruby N.

Source

module Test # (filename my\_test.rb)

def test  
puts “\n\ntest fired\n\n”  
end  
end

class OfferRenewalController \< ApplicationController

def payment\_made

require ‘my\_test’

```
Test.test

```

end

Error  
NoMethodError in Offer renewalController#payment\_made

private method `test’ called for Test:Module

So what am I doing wrong?

Thanks,  
Jason

---

<div class="post-metadata">

**Author:** ![vinsonizer](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/848f3c/32.png) [@vinsonizer](https://www.ruby-forum.com/u/vinsonizer)\
**Post date:** [December 8, 2006, 6:13pm UTC](https://www.ruby-forum.com/t/module-issue/78794/2 "2006-12-08T18:13:25Z")

</div>

Jason V. wrote:

> Error  
> NoMethodError in Offer renewalController#payment\_made
> 
> private method `test’ called for Test:Module
> 
> So what am I doing wrong?

In the module, you did define test as an instance method. So if you  
want to use it, you should

include Test

If you want to use as Test.test, define it as

module Test  
def Test.test  
[…]

or

module Test  
def self.test  
[…]

The latter is better as if you decide to change the name of your module,  
you won’t have to change the names of methods.

By the way, I find it funny that you require ‘my\_test’ from within a  
method. I believe it would be better to write

require ‘my\_test’

class OfferRenewalController \< ApplicationController  
def payment\_made  
Test.test  
end  
end

Cheers,

```
Vince
```

---

<div class="post-metadata">

**Author:** ![vinsonizer](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/848f3c/32.png) [@vinsonizer](https://www.ruby-forum.com/u/vinsonizer)\
**Post date:** [December 8, 2006, 6:55pm UTC](https://www.ruby-forum.com/t/module-issue/78794/3 "2006-12-08T18:55:37Z")

</div>

I plan move the “require” up top, once I’ve got my stuff straight.

Okay, I needed the “self.” in the Module def.

\< in ahs.rb \>  
module Ahs  
class CreditCard  
def self.test2  
puts “\n\nself.CreditCard.test2 fired\n\n”  
end  
end  
def self.test  
puts “\n\nself.test fired\n\n”  
end  
end

\< in offer\_renewal\_controller.rb \>  
Ahs.test  
Ahs.CreditCard.test2

Result:  
self.test fired  
undefined method `CreditCard’ for Ahs:Module [exception thrown]

What’s wrong with the second statement?

Thanks helping,  
Jason

On Dec 8, 11:12 am, Vincent F. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![vinsonizer](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/848f3c/32.png) [@vinsonizer](https://www.ruby-forum.com/u/vinsonizer)\
**Post date:** [December 8, 2006, 7:15pm UTC](https://www.ruby-forum.com/t/module-issue/78794/4 "2006-12-08T19:15:42Z")

</div>

Sweet, that works.

Thanks Vincent and Stefano,  
Jason

---

<div class="post-metadata">

**Author:** ![vinsonizer](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/848f3c/32.png) [@vinsonizer](https://www.ruby-forum.com/u/vinsonizer)\
**Post date:** [December 8, 2006, 7:03pm UTC](https://www.ruby-forum.com/t/module-issue/78794/5 "2006-12-08T19:03:39Z")

</div>

Alle 18:55, venerdì 8 dicembre 2006, Jason V. ha scritto:

> end  
> self.test fired  
> undefined method `CreditCard’ for Ahs:Module [exception thrown]
> 
> What’s wrong with the second statement?

You should use Ahs::CreditCard, not Ahs.CreditCard. The . syntax is used  
to  
call module methods; the :: is used to access constants defined in a  
module  
(including classes).

---

<div class="post-metadata">

**Author:** ![vinsonizer](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/848f3c/32.png) [@vinsonizer](https://www.ruby-forum.com/u/vinsonizer)\
**Post date:** [December 9, 2006, 8:47pm UTC](https://www.ruby-forum.com/t/module-issue/78794/6 "2006-12-09T20:47:59Z")

</div>

Hi Jason,

Try

Class OfferRenewallController \< ApplicationController  
include Test

def payment\_made  
test  
end  
end

I _think_ this is what you’re looking for.

Good luck.

Andy
