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
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
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.
Peter
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.
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
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
You need to call collect (you don't want collect!) on the array, not
on the branch_name for an individual branch
Fred