# DRY up help using #method

**URL:** <https://www.ruby-forum.com/t/dry-up-help-using-method/124537>\
**Category:** Rails\
**Created:** [December 30, 2007, 12:12am UTC](https://www.ruby-forum.com/t/dry-up-help-using-method/124537 "2007-12-30T00:12:55Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![donkeytastic](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/3bc359/32.png) [@donkeytastic](https://www.ruby-forum.com/u/donkeytastic)\
**Post date:** [December 30, 2007, 12:12am UTC](https://www.ruby-forum.com/t/dry-up-help-using-method/124537/1 "2007-12-30T00:12:55Z")

</div>

I am a newbie trying to DRY up my first application. Going well accept  
this annoying item (simplified down to problematic code) …

Original code:

business\_attributes = params[…] # values from a form in a view  
business\_application = BusinessApplication.find(…) # id from view  
business\_area = BusinessArea.create! business\_attributes  
business\_application.business\_areas \<\< business\_area unless  
business\_application.nil?  
business\_application.save

Now refactored to make more generic and not tied to any particular  
models (so I can add as an ApplicationController method and become part  
of a acts\_as helper). This code is part of a set of methods that are  
used 10’s of times across various controllers (the rest successfully  
DRY’d). target and source have a habtm relationship. The new code is as  
follows:

target\_model\_class = Object.const\_get(target) # target ==  
‘business\_areas’ - passed as argument  
source\_model\_class = Object.const\_get(source) # source ==  
‘business\_applications’ - passed as argument

attributes = params[…] # values from a form in a view  
source\_instance = source\_model\_class.find(…) # id from view  
target\_instance = target\_model\_class.create! attributes  
source\_instance.method(target) \<\< target\_instance unless  
source\_instance.nil?  
source\_instance.save

But gets the following error complaining \<\< method does not exist:

undefined method `\<\<’ for #\<Method:  
BusinessApplication#business\_areas\>

Have tried using #push instead of \<\< method but with same error. Also  
tried some poorly constructed #call methods too. I know I’m probably  
doing something completely wrong around the use of #method.

Any help?

Thanks!

Martyn.

---

<div class="post-metadata">

**Author:** ![donkeytastic](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/3bc359/32.png) [@donkeytastic](https://www.ruby-forum.com/u/donkeytastic)\
**Post date:** [December 30, 2007, 12:45am UTC](https://www.ruby-forum.com/t/dry-up-help-using-method/124537/2 "2007-12-30T00:45:30Z")

</div>

Martyn:

> source\_instance.save
> 
> But gets the following error complaining \<\< method does not exist:
> 
> undefined method `\<\<’ for #\<Method:  
> BusinessApplication#business\_areas\>

You don’t need to use #method method : you don’t want to  
manipulate a Method object but you just want to send a message  
whose name is an association.

You should look at : source\_instance.send(target)

– Jean-François.

---

<div class="post-metadata">

**Author:** ![donkeytastic](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/3bc359/32.png) [@donkeytastic](https://www.ruby-forum.com/u/donkeytastic)\
**Post date:** [December 30, 2007, 1:02am UTC](https://www.ruby-forum.com/t/dry-up-help-using-method/124537/3 "2007-12-30T01:02:41Z")

</div>

Jean-Franï¿½ois,

Thank you. That was it.

Martyn.
