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で「キー=>値として」を使用するレールの構文がよくわかりません。これが最も効率的な方法ですか?理想的ではない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 に答える