Ruby on rails Rails在循环中创建多维数组
我正试图在接下来7天的数组中循环,对于每一天,执行一个查询以找到所有匹配的“时间段”,并将它们添加到一个我可以在视图中循环的对象中。这在PHP中相当简单,但我不确定rails中的语法。我有一种情况,每天都可以有多个“交付时段”,我需要按天显示下周的所有这些时段 到目前为止,在我的控制器中Ruby on rails Rails在循环中创建多维数组,ruby-on-rails,Ruby On Rails,我正试图在接下来7天的数组中循环,对于每一天,执行一个查询以找到所有匹配的“时间段”,并将它们添加到一个我可以在视图中循环的对象中。这在PHP中相当简单,但我不确定rails中的语法。我有一种情况,每天都可以有多个“交付时段”,我需要按天显示下周的所有这些时段 到目前为止,在我的控制器中 d = Date.today d2 = d + 1.week @days = (d..d2).to_a @deliveries = [] @days.each do |d| @deliveries[][da
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 %>
我哪里做错了?不太清楚rails中的语法,在php中使用“as key=>value”。这是最有效的方法吗?它将导致7个查询,这并不理想
感谢您的帮助如果您的
型号
只有一个日数,则每周的时段将保持不变,您可以执行以下操作:
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"=>...}
=>{“Wed”=>[#、#、#、#、#、#],
“Thu”=>
哈希的使用方式如下:
<% @deliveries.each do |dayname, slots| %>
<%= dayname %>
<% slots.each do |s| %>
<%= slot data here %>
<% end %>
<% end %>
非常感谢,这看起来很完美。但是,我如何像上面的@days数组那样,以正确的顺序提取接下来的7天呢?我需要从今天开始,然后拉第二天6@Dave我编辑了我的答案,它会给你一个排序哈希,因为你现在需要完美!只需要包装插槽。每个循环都有一个条件-因为不是所有的日子都有插槽,但我仍然想显示它们。