0

我正在尝试遍历接下来 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.ini 中使用“as key => value”的 rails 语法。这是最有效的方法吗?这将导致 7 个不理想的查询

谢谢你的帮助

4

1 回答 1

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 %>
于 2013-09-11T02:31:14.587 回答