我有这个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 .. like this
<input value="Turn the Page" name="song[8, 9]" type="checkbox">
另外,我只会在数组中有一个用于该复选框的是唯一一个
<input value="Enter Sandman" name="song[10]" type="checkbox">
@past_requests是包含所有请求的数组... 关于如何实现这个的任何想法
答案 0 :(得分:1)
如果您能够提出group_by
功能,通过场地,日期和歌曲的组合进行分组,那么这将简化问题。
e.g。作为一个简单的例子,我们可以使用连接字符串作为键:
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
模型中,然后将请求链接到表演。这可能会简化事情。
答案 1 :(得分:0)
使用Rails / ActiveSupport group_by方法
@past_requests.group_by(&song_id).each do |song_id, requests|
... #create the checkbox tag here
end
需要考虑的事项