![](/img/trans.png)
[英]Preventing a Ruby on Rails notification daemon from emailing the same information more than once
[英]Ruby on Rails only show data value once if there are more than one of the same
在我的ruby on rails應用程序中,我當前正在顯示通過以下方式顯示每部電影的日期和時間:
<% if not @film.showings.blank? %>
To book click on a time below:</br>
<% @film.showings.each do |showing| %>
<%= showing.show_date.strftime("%A %e %B %Y") %>@ <%= showing.show_time.strftime("%H:%M") %><br>
<% end %>
<% else %>
<p>There are currently no showings for this film.</p>
<% end %>
這將顯示如下數據:
Sunday 25 January 2015 @ 12:00
Sunday 25 January 2015 @ 16:00
Monday 26 January 2015 @ 11:00
Monday 26 January 2015 @ 22:00
Tuesday 27 January 2015 @ 22:00
Wednesday 28 January 2015 @ 11:00
Wednesday 28 January 2015 @ 12:00
Wednesday 28 January 2015 @ 16:00
Wednesday 28 January 2015 @ 19:30
但是我想做的是,如果重復日期,那么它只會顯示一次並重復一次時間,例如,日期為2015年1月25日,星期日將顯示為:
Sunday 25 January 2015 @ 12:00 16:00
您應該按日期和參加時間對記錄進行分組。
<% if not @film.showings.blank? %>
To book click on a time below:</br>
<% @film.showings.group_by{|showing| showing.show_date.strftime("%A %e %B %Y") }.to_a.each do |showing| %>
<%= showing.first %>@ <%= showing.last.map{|s| s.show_time.strftime("%H:%M")}.join(' ') %><br>
<% end %>
<% else %>
<p>There are currently no showings for this film.</p>
<% end %>
您可以在助手或裝飾器中放置這樣的函數(如果您正在使用它們)。 我假設您通過@file.showings
。 這將返回您希望在視圖和顯示中循環的數組。
def show_times(showings)
showings.each_with_object({}) do |showing, hash|
key = showing.show_date.strftime("%A %e %B %Y")
hash[key] ||= []
hash[key] << showing.show_time.strftime("%H:%M")
end.map do |date, times|
"#{date} @ #{times.join(' ')}"
end
end
給定日期時間對象數組,您可以使用以下代碼提取顯示日期和時間的嵌套哈希。 它可能最好地存在於Film模型中。
def showings_hash
showings.pluck(:show_time).map {|datetime| datetime.to_date}.uniq.map{|date| {date => dates.select{|datetime| date == datetime.to_date}}}
end
返回:
- 2015-01-12:
- !ruby/object:DateTime 2015-01-12 18:00:00.000000000 Z
- !ruby/object:DateTime 2015-01-12 19:00:00.000000000 Z
- !ruby/object:DateTime 2015-01-12 20:00:00.000000000 Z
- 2015-01-13:
- !ruby/object:DateTime 2015-01-13 20:00:00.000000000 Z
然后,您可以像這樣遍歷視圖中的每個顯示日期:
<% @film.showings_hash.each do |showing_date| %>
<li>
<%= showing_date %>
<% showing_date.each do |showtime| %>
<%= showtime.strftime("%H:%M") %>
<% end %>
</li>
<% end %>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.