2010-10-11 63 views
1

我有這個data,你可以看到我有大約10個請求。請求包含場地,歌曲,日期和藝術家。我需要循環這些請求,如果有相同的地點和日期的同一首歌曲的兩個請求,然後我需要添加到複選框。例如:循環複選框的記錄

#<Request id: 8, artist: "Metallica", song: "Turn the Page", venue: 
"Rod Laver Arena at Melbourne Park - Melbourne Vic", showdate: "2010-10-09", 
amount: nil, user_id: 6, created_at: "2010-10-09 01:32:26", 
updated_at: "2010-04-09 01:32:26", like_reason: "Its a good song", pledge: 100>, 

#<Request id: 9, artist: "Metallica", song: "Turn the Page", venue: 
"Rod Laver Arena at Melbourne Park - Melbourne Vic", showdate: "2010-10-09", 
amount: nil, user_id: 6, created_at: "2010-10-09 01:32:26", 
updated_at: "2010-05-09 01:32:26", like_reason: "Its great", pledge: nil>, 

#<Request id: 10, artist: "Metallica", song: "Enter Sandman", venue: 
"Aector Arena - Auckland Central, New Zealand", showdate: "2010-10-11", 
amount: nil, user_id: 6, created_at: "2010-10-09 01:32:26", 
updated_at: "2010-05-09 01:32:26", like_reason: "good tune", pledge: nil>, 

正如你可以看到我有兩個請求到同一地點和相同的日期和同一首歌曲。我想一個循環,將在視圖中創建複選框,但如果遇到具有相同的日期信息同一首歌然後添加ID的複選框array..like這

<input value="Turn the Page" name="song[8, 9]" type="checkbox"> 

其他明智的,我將只有一個在該複選框數組是唯一一個

<input value="Enter Sandman" name="song[10]" type="checkbox"> 

@past_requests是將包含所有請求的陣列... 就如何實現這一目標

+0

發現你不接受這個答案。這是否意味着您對建議的解決方案有問題? – mikej 2010-10-11 15:40:01

回答

1

如果你能想出一個group_by功能,通過場地,日期和歌曲的組合,那麼這將簡化問題。

例如作爲一個簡單的例子,我們可以使用一個連接字符串作爲關鍵:

grouped_requests = requests.group_by do |req| 
    "#{req.artist}/#{req.song}/#{req.venue}/#{req.date}" 
end 

那麼你的複選框可以用產生:

<% grouped_requests.values.each do |requests| %> 
    <% request_ids = requests.collect { |request| request.id } %> 
    <%= check_box_tag requests.first.song, "song[#{request_ids.join(',')}]" %> 
<% end %> 

請注意,我們不關心這要求我們使用的因爲所有的分組請求都有相同的歌曲,因此我們可以使用requests.first.song

或者,您可以將場景/日期/歌曲抽取到Performance模型中,然後將請求與演出相關聯。這可能會簡化事情。

0

使用Rails的/的ActiveSupport group_by任何想法方法

@past_requests.group_by(&song_id).each do |song_id, requests| 
    ... #create the checkbox tag here 
end 

需要考慮的事情

  • 我創建了song_id屬性,我不知道什麼是8,9,10
  • 這似乎是一個奇怪的方式爲您整合都記錄下來,並組由歌曲。