# Dropdown with concatenated columns

**URL:** <https://www.ruby-forum.com/t/dropdown-with-concatenated-columns/99902>\
**Category:** Rails\
**Created:** [July 26, 2006, 3:58am UTC](https://www.ruby-forum.com/t/dropdown-with-concatenated-columns/99902 "2006-07-26T03:58:38Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![ldk2005](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/d9b06d/32.png) [@ldk2005](https://www.ruby-forum.com/u/ldk2005)\
**Post date:** [July 26, 2006, 3:58am UTC](https://www.ruby-forum.com/t/dropdown-with-concatenated-columns/99902/1 "2006-07-26T03:58:38Z")

</div>

What is the best way to create a drop down where the viewable text in a  
concatenation of 2 or more columns?

For instance, I hane a lookup table with these columns.  
Model FOO  
columns: id , name, phone

In my drop select tag, I’d like the user to see:

“name1 phone1”  
“name2 phone2”  
etc…

I know I can do this using find\_by\_sql . …  
But, isn’t there a more elegant way?

---

<div class="post-metadata">

**Author:** ![ldk2005](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/d9b06d/32.png) [@ldk2005](https://www.ruby-forum.com/u/ldk2005)\
**Post date:** [July 26, 2006, 5:49am UTC](https://www.ruby-forum.com/t/dropdown-with-concatenated-columns/99902/2 "2006-07-26T05:49:20Z")

</div>

> “name2 phone2”  
> etc…
> 
> I know I can do this using find\_by\_sql . …  
> But, isn’t there a more elegant way?

class FOO  
def name\_plus\_phone  
self.name + ’ ’ + self.phone  
end  
end

@names = FOO.find(:all)

\<%= select\_tag ‘blah’, options\_from\_collection\_for\_select(@names ‘id’,  
‘name\_plus\_phone’) %\>

-philip

---

<div class="post-metadata">

**Author:** ![ldk2005](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/d9b06d/32.png) [@ldk2005](https://www.ruby-forum.com/u/ldk2005)\
**Post date:** [July 26, 2006, 6:04am UTC](https://www.ruby-forum.com/t/dropdown-with-concatenated-columns/99902/3 "2006-07-26T06:04:50Z")

</div>

On Tuesday, July 25, 2006, at 10:52 PM, Philip H. wrote:

> > “name2 phone2”
> 
> @names = FOO.find(:all)
> 
> \<%= select\_tag ‘blah’, options\_from\_collection\_for\_select(@names  
> ‘id’, ‘name\_plus\_phone’) %\>
> 
> -philip
> 
> * * *
> 
> Rails mailing list  
> removed\_email\_address@domain.invalid  
> [http://lists.rubyonrails.org/mailman/listinfo/rails](http://lists.rubyonrails.org/mailman/listinfo/rails)

\<%= select ‘model’, ‘name’, @names.map {|x| [“#{x.name} - #{x.phone}”,  
x.id]} %\>

This works too, and set’s the ‘name\_id’ attribute to the selected id.

\_Kevin  
[www.sciwerks.com](http://www.sciwerks.com)

---

<div class="post-metadata">

**Author:** ![ldk2005](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/d9b06d/32.png) [@ldk2005](https://www.ruby-forum.com/u/ldk2005)\
**Post date:** [July 27, 2006, 4:07pm UTC](https://www.ruby-forum.com/t/dropdown-with-concatenated-columns/99902/4 "2006-07-27T16:07:09Z")

</div>

Nathan, is this how it should be used?

Class Zipcode \< ActiveRecord::Base  
def self.city\_zip  
composed\_of :cityzip, :mappings =\> w%(city zipcode)  
end  
end

azip = Zipcode\_find\_by\_zipcode(‘98055’)

azip.city\_zip

I’m getting a ‘method not found’ error.  
-Larry

---

<div class="post-metadata">

**Author:** ![ldk2005](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/d9b06d/32.png) [@ldk2005](https://www.ruby-forum.com/u/ldk2005)\
**Post date:** [July 26, 2006, 8:29pm UTC](https://www.ruby-forum.com/t/dropdown-with-concatenated-columns/99902/5 "2006-07-26T20:29:11Z")

</div>

On 2006-07-26 00:05:32 -0400, Kevin O.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) said:

> > > 
> > 
> > end  
> > removed\_email\_address@domain.invalid  
> > [http://lists.rubyonrails.org/mailman/listinfo/rails](http://lists.rubyonrails.org/mailman/listinfo/rails)
> 
> \<%= select ‘model’, ‘name’, @names.map {|x| [“#{x.name} - #{x.phone}”,  
> x.id]} %\>
> 
> This works too, and set’s the ‘name\_id’ attribute to the selected id.
> 
> \_Kevin  
> [www.sciwerks.com](http://www.sciwerks.com)

You also can use composed\_of in your model to make your model easier to  
use. You could create a class called ModelAndPhone and then have it  
combine the name and phone during to\_s.

## I know it sounds complicated, but I like it.

://  
Nathan H.
