Зацикливание записей для флажка - PullRequest
1 голос
/ 11 октября 2010

У меня есть эти данные , и, как вы можете видеть, у меня есть около 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>,

Как видите, у меня есть два запроса на одно и то же место и одну и ту же дату и одну и ту же песню. Я хочу цикл, который будет создавать флажки в представлении, но если он встречает ту же песню с той же информацией о дате, то добавьте идентификатор в массив флажков .. как это

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

в противном случае у меня только один в массиве для этого флажка, это единственный

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

@ past_requests - это массив, который будет содержать все запросы ... Любые идеи о том, как этого добиться

Ответы [ 2 ]

1 голос
/ 11 октября 2010

Если вы можете придумать функцию 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 голосов
/ 11 октября 2010

Используйте 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 были
  • Это кажется странным способом объединить все и сгруппировать по песням.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...