Outputting a string from an array of objects

Hi All,

Newbie here working with an existing Rails project. I’m trying to create
a method that will return a simple string of object values.

I have an app that has companies that each are assigned to one or more
branches. Then I have a contact who is assigned to a company. I’ve
created an association with belongs_to for both the company and branch,
and the branch and company has their own class in AR.

So

def get_company_branches

my_branches = self.company.branches
my_list = my_branches.each { |x| puts x.branch_name }
return my_list
end

For some reason this returns an object id (the raw ruby object id I
think) not the string i am looking for. Any suggestions?

Best,

Peter

On Feb 24, 5:07pm, Peter D Bethke [email protected] wrote:

my_branches = self.company.branches
my_list = my_branches.each { |x| puts x.branch_name }
return my_list
end

For some reason this returns an object id (the raw ruby object id I think) not
the string i am looking for. Any suggestions?

puts just dumps things to stdout, so you definitely don’t want to be
using that here.
If you want to create an array based on the value of each object in a
collection then you should use collect (also available as map). It
creates a new array containing the result of evaluating the block for
each object of the original collection.

Fred

On 24 February 2011 17:07, Peter D Bethke [email protected] wrote:

def get_company_branches
my_branches = self.company.branches
my_list = my_branches.each { |x| puts x.branch_name }
return my_list
end

You might find that something like this is what you’re after:

def get_company_branches
self.company.branches.collect(&:branch_name).join(", ") if
self.company && self.company.branches
end

Have a look at the methods available to Array and Enumerable in both
the Rails and Ruby apis.

On 24 February 2011 18:12, Peter D Bethke [email protected] wrote:

Thanks Fred!

Does this look right? I’m still getting an error for some reason:

Always post the error… just saying “I’ve got one” doesn’t help
people point out where you might be having problems (although in this
case, it’s ruby syntax… check the API for the “.collect” method :slight_smile:

def get_company_branches
my_branches = self.company.branches # you don’t really need these
intermediate variables… just use self.branches.collect…
my_list = my_branches.collect { |x| x.branch_name }
return my_list.join(", ") # “collect” returns an array, so we can
join the array into a string, or maybe use the “to_sentence” extension
to prettify it
end

…my previous method just does the same, a little more compact.

Thanks Fred!

Does this look right? I’m still getting an error for some reason:

def get_company_branches

my_branches = self.company.branches
my_list = my_branches.branch_name.collect! { |x| x + “,” }
return my_list
end

looking for it to output a concatenated string - still erroring out tho.
:frowning:

Peter

On Feb 24, 6:12pm, Peter D Bethke [email protected] wrote:

Thanks Fred!

Does this look right? I’m still getting an error for some reason:

def get_company_branches

my_branches = self.company.branches
my_list = my_branches.branch_name.collect! { |x| x + “,” }
return my_list
end

You need to call collect (you don’t want collect!) on the array, not
on the branch_name for an individual branch

Fred