I need a bit of help with some Ruby array jujitsu.
I have the following array called @tasks:
[#<PivotalTracker::Story:0x007f9d6b8 @id=314, @url="http://www.pivotaltracker.com/", @created_at=#<DateTime: 2012-06-18T20:23:42+00:00 ((2456097j,73422s,0n),+0s,2299161j)>, @accepted_at=nil, @project_id=357031, @name="Test ", @description="This is the description for \"Test\"", @story_type="feature", @estimate=-1, @current_state="unstarted", @requested_by="joe jones", @owned_by=nil, @labels=nil, @jira_id=nil, @jira_url=nil, @other_id=nil, @integration_id=nil, @deadline=nil, @attachments=[]>, #<PivotalTracker::Story:0x007f9d6b8 @id=315, @url="http://www.pivotaltracker.com/", @created_at=#<DateTime: 2012-06-18T20:25:20+00:00 ((2456097j,73520s,0n),+0s,2299161j)>, @accepted_at=nil, @project_id=357031, @name="Test 2", @description="This is the description for \"Test 2\"", @story_type="feature", @estimate=-1, @current_state="unstarted", @requested_by="joe jones", @owned_by=nil, @labels=nil, @jira_id=nil, @jira_url=nil, @other_id=nil, @integration_id=nil, @deadline=nil, @attachments=[]>, #<PivotalTracker::Story:0x007f9d6b8 @id=316, @url="http://www.pivotaltracker.com/story/", @created_at=#<DateTime: 2012-06-18T20:25:26+00:00 ((2456097j,73526s,0n),+0s,2299161j)>, @accepted_at=nil, @project_id=357031, @name="Test 3", @description="Description for Test 3 ", @story_type="feature", @estimate=-1, @current_state="unstarted", @requested_by="joe jones", @owned_by=nil, @labels=nil, @jira_id=nil, @jira_url=nil, @other_id=nil, @integration_id=nil, @deadline=nil, @attachments=[]>]
My end goal is to create a JavaScript array in my .erb view with just the ID values in the above array.
I was thinking of trying something like:
var myJSArray = [<%= @tasks.each { |t| print t.id.to_s+", " } %>];
However, that obviously appends a “,” to the end of the string, which is not desirable (i.e. it returns “314, 315, 316,”. It also seems like a bit of a hack and not the right way to do it.
Any ideas on how to do this properly?
Thank you!
UPDATE: After some more research on SO, it seems I can do this in two steps:
@ids = @tasks.map { |t| t.id }
and then use that in the view with:
var myJSArray = [<%= @ids.map(&:to_s).join(", ") %>];
Not sure if this is ideal or if it could be done in a single step, though.
Or you may prefer something like this: