2010-10-11 43 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
  • 这似乎是一个奇怪的方式为您整合都记录下来,并组由歌曲。