我有一个JSONB列,其中保存store
的营业时间。如下所示,它似乎并没有保持其输入顺序(星期日的开/关时间,星期一的开/关时间)。
我想遍历一周中的每一天以产生每天的结果,并使用day
查找相应的#{day}_opens_at
显示时间。但是我不确定如何使用循环索引来做到这一点。而不是sunday 09:00:00 - 18:00:00
,它会打印出所有时间:
sunday
08:00:00 09:00:00 20:00:00 18:00:00
monday
08:00:00 09:00:00 20:00:00 18:00:00
tuesday
08:00:00 09:00:00 20:00:00 18:00:00
查看
<% I18n.t('date.day_names').each_with_index do |day, wday| %>
<p>#{day.downcase}</p>
<% @store.business_hours.each do |day, hour| %>
<%= hour %>
<% end %>
<% end %>
>> @store.business_hours
=> {"monday_opens_at"=>"08:00:00", "sunday_opens_at"=>"09:00:00", "monday_closes_at"=>"20:00:00", "sunday_closes_at"=>"18:00:00"}
>> @store.business_hours.first
=> ["monday_opens_at", "08:00:00"]
编辑
我能够在@jvillian和自定义帮助程序方法的帮助下使其产生可读时间Sunday 09:00 AM - 06:00 PM
- I18n.t('date.day_names').each do |day|
- %w[opens_at closes_at].each_with_object([]) do |time_type, to_return|
- @hours = to_return << @store.business_hours["#{day.downcase}_#{time_type}"]
- @hours.compact.tap do |hours|
- unless hours.blank?
%p= day
%p= time_helper(hours)
def time_helper(time)
times = []
time.each do |n|
times << Time.parse(n).strftime("%I:%M %p")
end
times.join(' - ')
end
答案 0 :(得分:1)
给出:
@store = OpenStruct.new({business_hours: {"monday_opens_at"=>"08:00:00", "sunday_opens_at"=>"09:00:00", "monday_closes_at"=>"20:00:00", "sunday_closes_at"=>"18:00:00"}})
关于以下方面的事情如何?
I18n.t('date.day_names').each do |day|
%w(opens_at closes_at).each_with_object([]) do |time_type, to_return|
to_return << @store.business_hours["#{day.downcase}_#{time_type}"]
end.compact.tap do |hours|
unless hours.blank?
puts day
puts hours.join(' - ')
end
end
end
我意识到它不是erb
格式,对此感到抱歉。我不再使用erb
并对语法感到生疏。但是,该逻辑可在控制台中运行,给出:
sunday
09:00:00 - 18:00:00
monday
08:00:00 - 20:00:00
...并将其放入erb
不应太重。