2012-06-25 3 views
0

Мне нужна небольшая помощь с некоторым массивом 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=[]>] 

Моя конечная цель заключается в создании массива JavaScript, на мой взгляд .erb только с значениями ID в вышеуказанном массиве.

Я думал о попытке что-то вроде:

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

Однако, что очевидно дописывает «» до конца строки, которая не является желательным (т.е. она возвращает «314, 315, 316, .»Кроме того, похоже, немного рубить и не правильный способ сделать это

Любые идеи о том, как сделать это правильно

Спасибо

UPDATE:.?! После того, как некоторые больше исследований на SO, мне кажется, я могу сделать это в два этапа:

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

, а затем использовать его в представлении с:

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

Не уверен, что это идеальный или, если это может быть сделано за один шаг.

ответ

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

Или вы можете предпочесть что-то вроде этого:

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

+1 для 'to_json' – robbrit

+0

спасибо! первая вариация работала, когда я не включаю «j» - не уверен, почему это так? – tonic

+0

второй вызвал проблемы. копаться в дальнейшем ... – tonic

1

Использование Array#join:

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

это прекрасно работает! – tonic

Смежные вопросы