Как я могу объединить два массива в один по общему признаку?
Как я могу объединить два массива в один, например...
Day 1: Notes/form
Day 2: Notes/form
Day 3: Notes/form
Day 4: Notes/form
Day 5: Notes/form
Если пользователь создаст заметку в День 3, это будет выглядеть так...
Day 1: Notes/form
Day 2: Notes/form
Day 3: Notes/notes
Day 4: Notes/form
Day 5: Notes/form
Приведенный ниже код чудовищности пытался достичь вышеупомянутого, но итерация полностью отключена. Например, если заметка создается в день 1 и день 3, то результат будет выглядеть следующим образом...
Day 1: Notes/notes # Shows both Day 1 and Day 3 note. Only want to show Day 1 note
Day 1: Notes/form
Day 2: Notes/form
Day 2: Notes/form
Day 3: Notes/notes # Shows both Day 1 and Day 3 note. Only want to show Day 3 note
Day 3: Notes/form
Day 4: Notes/form
Day 4: Notes/form
Day 5: Notes/form
Day 5: Notes/form
проблемы / показать
<% @challenge.dates_challenged.first(@challenge.days_challenged).each_with_index do |date, i| %>
<% @notes.each do |note| %>
Day <%= i + 1 %>
<% if note.notes_date.strftime("%m/%d/%y") == date.strftime("%m/%d/%y") %>
<%= render 'notes/notes' %>
<% else %>
<%= render 'notes/form', :date => date %>
<% end %>
<% end %>
<% end %>
Напомним, что пользователь создает вызов. Задача имеет атрибут days_challenged
, Пользователь выбирает, сколько дней будет оспорено, то есть 10, 15, 30 и т. Д. Для каждого из этих дней я хочу показать заметки / форму. Если пользователь затем вводит заметку в день, тогда заметку / форму следует заменить на странице показа этой заметкой (ни один день не должен иметь более одной заметки, связанной с ней).
1 ответ
Вы делаете слишком много внутри цикла, который вы используете, чтобы найти заметку дня. Это должно быть правильно:
<% @challenge.dates_challenged.first(@challenge.days_challenged).each_with_index do |date, i| %>
Day <%= i + 1 %>
<% if @notes.any? { |note| note.notes_date.strftime("%m/%d/%y") == date.strftime("%m/%d/%y") } %>
<%= render 'notes/notes' %>
<% else %>
<%= render 'notes/form', :date => date %>
<% end %>
<% end %>
Это все еще слишком много логики в представлении.
- Как прокомментировал фотоионизированный, было бы легче, если
@notes
былиHash
чьи ключи былиDate
и чьи значения былиNotes
, Затем вы можете заменитьany?
с поиском по хешу. - Мне непонятно зачем нужно сравнивать
strftime("%m/%d/%y")
, Вы должны просто быть в состоянии сравнитьDate
s. (Если вы не можете сделать это, потому что они находятся в разных часовых поясах или что-то в этом роде, рассмотрите возможность исправить это - это вызовет путаницу во всем приложении.) - Я бы извлек
dates_challenged.first(@challenge.days_challenged)
в метод наChallenge
назвал что-то вродеcurrent_dates_challenged
и использовать это в представлении.