Forum: Ruby on Rails how to include a module in a model

Posted by badnaam (Guest)
on 2010-08-23 21:14
(Received via mailing list)
I created a module  MyModule "my_module.rb" and put in a lib folder in
my rails app.

In my User.rb model I call include MyModule.

When I try to use a method inside MyModule I get an "undefined method
error". How do I include this module in the model?

Thanks
Posted by Marnen Laibow-Koser (marnen)
on 2010-08-23 21:15
badnaam wrote:
> I created a module  MyModule "my_module.rb" and put in a lib folder in
> my rails app.
> 
> In my User.rb model I call include MyModule.
> 
> When I try to use a method inside MyModule I get an "undefined method
> error". How do I include this module in the model?

What you described should work.  Let's see code.

> 
> Thanks

Best,
-- 
Marnen Laibow-Koser
http://www.marnen.org
marnen@marnen.org

Sent from my iPhone
Posted by badnaam (Guest)
on 2010-08-23 21:22
(Received via mailing list)
Here is the code..

http://pastie.org/1110631

Thanks
Posted by badnaam (Guest)
on 2010-08-23 21:23
(Received via mailing list)
http://pastie.org/1110631
Posted by Rob Biedenharn (Guest)
on 2010-08-23 21:45
(Received via mailing list)
I suspect that after you require validation_group.rb you want to have
something like:

ActiveRecord::Base.class_eval { extend
ValidationGroup::ActiveRecord::ActsMethod }

You need to get the "validation_group" method into ActiveRecord::Base
and therefore User before you call it.

-Rob

On Aug 23, 2010, at 3:22 PM, badnaam wrote:

>>> When I try to use a method inside MyModule I get an "undefined  
>> -- 
> Groups "Ruby on Rails: Talk" group.
> To post to this group, send email to rubyonrails- 
> talk@googlegroups.com.
> To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com 
> .
> For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en 
> .
>

Rob Biedenharn
Rob@AgileConsultingLLC.com  http://AgileConsultingLLC.com/
rab@GaslightSoftware.com    http://GaslightSoftware.com/
Posted by badnaam (Guest)
on 2010-08-23 21:51
(Received via mailing list)
Rob,

Are you saying I need to do a

1 - require 'validation_group' in my User.rb

2 - Then add

ActiveRecord::Base.class_eval { extend
ValidationGroup::ActiveRecord::ActsMethod }
to my User.rb?

Thanks
On Aug 23, 12:44 pm, Rob Biedenharn <R...@AgileConsultingLLC.com>
Posted by Rob Biedenharn (Guest)
on 2010-08-23 21:59
(Received via mailing list)
On Aug 23, 2010, at 3:50 PM, badnaam wrote:

>>
> ActiveRecord::Base.class_eval { extend
> ValidationGroup::ActiveRecord::ActsMethod }
> to my User.rb?
>
> Thanks

No, I don't know what you "need" only what I "suspect" your code is
missing.  Probably not in your user.rb, but in an initializer
somewhere.  (config/initializers/validation_group.rb or in config/
environment.rb)  If you're modifying the plugin, you really need to
understand the Ruby hook methods (like extended() and included()) or
at least copy all the relevant bits when you're cargo-culting a
solution.

-Rob

>>>>> I created a module  MyModule "my_module.rb" and put in a lib
>>
>>>> Posted viahttp://www.ruby-forum.com/.
>>
> .
> For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en 
> .
>

Rob Biedenharn
Rob@AgileConsultingLLC.com  http://AgileConsultingLLC.com/
rab@GaslightSoftware.com    http://GaslightSoftware.com/
Posted by dave (Guest)
on 2010-09-02 08:42
(Received via mailing list)
ouch. Cargo cult. a bit harsh. At some point we were all learning to
program. How we treat the newcomer says a lot about the Rails
community.

badnamm, I think what you're trying to do might be satisfied by extend
not include.

see this article for more info.

http://railstips.org/blog/archives/2009/05/15/include-vs-extend-in-ruby/

dave

On Aug 23, 12:58 pm, Rob Biedenharn <R...@AgileConsultingLLC.com>
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.