a simple way to generate a comma separated list of codes?

I have a model, Account, with many Courses. I want to display the course
codes for those courses as comma delimited text in an attribute of the
account. So I would have

Account << ActiveRecord::Base
has_many :courses

def get_course_codes_as_text
  courses.each {|course| something something but I don't know what
end

Now I could do it the hard way by setting up a string var and pumping
stuff into it inside the block. But there's an easier Rubyesque way to
do this which I've seen in code elsewhere but I can't find the code now
so I thought I'd ask here. Something to do with join or map or something

John Small

a = []

courses.each { |course|

a.push(course.code)

}

a = a.join “,”

This ought to do it.

or… (a bit more concise)

courses.collect(&:code).join(’,’)

See if I qualify:

courses.collect {|c| c.code}.join(",")

John Small wrote:

Newbie question: how do I prevent your code snippet from becoming an n-
fetch?

Eager loading will work, but if all I want are the codes, then eager
loading of the associated courses will over-retrieve data.

Yes, yes, I know - don't over optimize. But if I know how to optimize,
at least I can put a comment in the code to remind me when I get
twitter-size traffic. :slight_smile:

-- Bosco

William Yeung wrote:

See if I qualify:

courses.collect {|c| c.code}.join(",")

Yes, that's the code snippet I was looking for!

Thanks

John Small