Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails在循环中创建多维数组_Ruby On Rails - Fatal编程技术网

Ruby on rails 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

我正试图在接下来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 %>

我哪里做错了?不太清楚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我编辑了我的答案,它会给你一个排序哈希,因为你现在需要完美!只需要包装插槽。每个循环都有一个条件-因为不是所有的日子都有插槽,但我仍然想显示它们。