ActiveRecord, Find that return only one column

Hello,
Is it possible to make a “join” on an array of objects?
If not, is is possible to return only one column with the find method?

#method
def self.top_3_words
Search.find(:all,:limit=>3, :order =>“count desc”)
end

#View
<% if !@top_search.blank? %>
<%= @top_search.word.join(",") %> ???
<% else %>

No search yet!

<% end %>

Greg

On Tue, 2010-02-16 at 07:01 +0100, Greg Ma wrote:

<% if !@top_search.blank? %>
<%= @top_search.word.join(",") %> ???
<% else %>

No search yet!

<% end %>

not sure what you’re getting at but

  • concatenates two arrays

<< pushes an object on to the end of an array

test1 = Array.new
=> []

test2 = [“5”]
=> [“5”]

test1 + test2
=> [“5”]

test1 << “6”
=> [“6”]

test1 + test2
=> [“6”, “5”]

Craig


This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.

Assuming the followings:
- Your Search model have a column “word”
- @top_search is a array with 3 latest search result, where each
element have a :word
- You want to join words from these 3 search objects

Then you just can do as following:
@top_search.map(&:word).join(’,’)

Hope it will work if my assumptions are correct :slight_smile:

Craig W. wrote:

On Tue, 2010-02-16 at 07:01 +0100, Greg Ma wrote:

<% if !@top_search.blank? %>
<%= @top_search.word.join(",") %> ???
<% else %>

No search yet!

<% end %>

not sure what you’re getting at but

  • concatenates two arrays

<< pushes an object on to the end of an array

test1 = Array.new
=> []

test2 = [“5”]
=> [“5”]

test1 + test2
=> [“5”]

test1 << “6”
=> [“6”]

test1 + test2
=> [“6”, “5”]

This cannot work in my case as my array contains Tags object.
I’d need to access each element to access the property i want to display

Craig


This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.

Samiron Rony wrote:

Assuming the followings:
- Your Search model have a column “word”
- @top_search is a array with 3 latest search result, where each
element have a :word
- You want to join words from these 3 search objects

Then you just can do as following:
@top_search.map(&:word).join(’,’)

Hope it will work if my assumptions are correct :slight_smile:

Great thanks :slight_smile:

You can also do something like Search.find(:all, :select =>
“word”, :limit=>3, :order =>“count desc”) if you only need the word
column from each record and want to be a little easier on memory.

Also, be careful with the Symbol#to_proc shorthand ( map(&:word) )
with large arrays, as it is pretty CPU-inefficient in Rails from what
I understand.

http://blog.hasmanythrough.com/2006/3/7/symbol-to-proc-shorthand
(check the comments)

Jarin U.
Robot Mode LLC