我正在尝试遍历接下来7天的数组,并为每个数组执行查询以查找匹配的所有“时间段”,并将这些添加到我可以在视图中循环的对象。这在PHP中相当简单,但我不确定rails中的语法。我有一种情况,每天都有多个'交付位'可用,我需要在下一周,白天显示所有这些插槽。
到目前为止我的控制器已经
了d = Date.today
d2 = d + 1.week
@days = (d..d2).to_a
@deliveries = []
@days.each do |d|
@deliveries[][dayname] = d.strftime("%a")
@deliveries[][slots] = Model.where("day = ?", d.strftime("%w"))
end
然后在我看来,我想这样做
<% @deliveries.each do |d| %>
<%= d.dayname %>
<% d.slots.each do |s| %>
<%= slot data here %>
<% end %>
<% end %>
我哪里错了?不太确定你在php中使用“as key =&gt; value”的rails中的语法。这是最有效的方法吗?这将导致7个查询不理想
感谢您的帮助
答案 0 :(得分:2)
如果您的Model
只有一个天数,slots
每周都会相同,您可以执行以下操作:
slots_by_day = Model.all.group_by(&:day)
@deliveries = (Date.today..Date.today + 6.days).each_with_object({}) do |day, dayname_groups|
dayname_groups.merge!(day.strftime('%a') => slots_by_day[day.strftime('%w').to_i])
end
它将获取所有模型,按星期的天数对它们进行分组,然后构建每天数字的哈希映射,其中日期名称最后以哈希值结尾:
=> {"Wed"=>[#<Model...>, #<Model...>, #<Model...>, #<Model...>],
"Thu"=>[#<Model...>, #<Model...>, #<Model...>, #<Model...>], "Fri"=>...}
哈希将像这样使用:
<% @deliveries.each do |dayname, slots| %>
<%= dayname %>
<% slots.each do |s| %>
<%= slot data here %>
<% end %>
<% end %>