从Ruby数组中获取特定值并创建逗号分隔字符串

问题描述:

我需要一些有关Ruby数组jujitsu的帮助。从Ruby数组中获取特定值并创建逗号分隔字符串

我有以下阵列称为@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=[]>] 

我的最终目标是建立在我的.erb视图中的JavaScript数组只以上数组中的ID值。

我想尝试这样的:

var myJSArray = [<%= @tasks.each { |t| print t.id.to_s+", " } %>]; 

然而,这显然追加“”字符串,这是不可取的结束(即返回“314,315,316, ”这也似乎是一个黑客攻击的一位,而不是做正确的方式

如何做到这一点正确

谢谢

更新任何想法。?!经过一番在SO更多的研究,看来我可以分两步执行此操作:

@ids = @tasks.map { |t| t.id } 

,然后使用该视图与:

var myJSArray = [<%= @ids.map(&:to_s).join(", ") %>]; 

不知道这是理想的,或者它可以做尽管如此,只需一步。

var myJSArray = [<%= j @tasks.map(&:id).join(',') %>]; 

或者,你可能更喜欢这样的事情:

var myJSArray = <%= @tasks.map(&:id).to_json %>; 
+0

+1 for'to_json' – robbrit

+0

谢谢!当我不包含“j”时,第一个变体工作 - 不知道为什么那里有? – tonic

+0

第二个实际上引起了问题。挖掘进一步...... – tonic

使用Array#join

<%=print @task.map {|t| t.id.to_s}.join(', ') %> 
+0

这个完美的作品! – tonic