1

これに出くわすまで、私はもう新人ではないと思っていました。

HTMLリストを読み込んで、ユーザーごとにショップをグループ化し、ショップごとにレシートの数と合計金額を表示しようとしています。

Sql では、group by を使用してこれを簡単に実行できるため、Shop モデル内の以下のコードを Rails コンソールにロードしようとしました。

 def self.group_receipts(user, search_hash=nil)

    shop_ids = Shop.pluck(:id) & Receipt.from_companies(user, search_hash).pluck(:shop_id)

    #greceipt means Grouped Receipt
    greceipt = Struct.new(:name, :number_of_receipts, :total)

    query = Shop.joins(:receipts).where('shops.id in (?)',shop_ids).select('shops.name,count(receipts.id) as number_of_receipts,sum(receipts.total) as total').group('shops.id')

    query

  end

これが私の出力です

>> Shop.group_receipts(302).all
   (2.0ms)  SELECT id FROM "shops" 
   (3.0ms)  SELECT shop_id FROM "receipts" WHERE (receipts.id IN (SELECT receipts.id
 FROM receipts
 INNER JOIN shops on shops.id=receipts.shop_id
 INNER JOIN companies on companies.id = shops.company_id
 INNER JOIN user_companies on user_companies.company_id = companies.id
 WHERE user_companies.user_id = 302)) AND (receipts.is_manual is null or receipts.is_manual=false) ORDER BY receipts.created_at DESC
  Shop Load (2.0ms)  SELECT shops.name,count(receipts.id) as number_of_receipts,sum(receipts.total) as total FROM "shops" INNER JOIN "receipts" ON "receipts"."shop_id" = "shops"."id" WHERE (shops.id in (16)) GROUP BY shops.id
[#<Shop name: "Kirlin Osinski and Dooley">]

クエリが問題ないように見える場合、出力が次のようにならないのはなぜname, 10, 1000ですか?

メソッド定義で見つけた greceipt 構造体は、後で gs.name、gs.number_of_receipts、gs.total にアクセスできるように構造体を作成することを意図していますが、この構造体型のオブジェクトのリストを上記の出力:-S.

誰か助けて?

4

1 に答える 1

1

このフォーラムの助けを借りて、問題は Rails コンソール内にあることがわかりました。

私はで終わった

モデル:

def self.group_receipts(user, search_hash=nil)

    shop_ids = Shop.pluck(:id) & Receipt.from_companies(user, search_hash).pluck(:shop_id)
    query = Shop.joins(:receipts).where('shops.id in (?)',shop_ids).select('shops.name,count(receipts.id) as number_of_receipts,sum(receipts.total) as total').group('shops.id')
    query

end

コントローラ:

@receipts_per_shop = Shop.group_receipts(current_user)

部分ビュー _receipts_per_shop:

<table class="table table-striped">
  <thead>
  <th><%=t 'activerecord.attributes.shop.name'%></th>
  <th>#</th>
  <th>Total</th>
  </thead>
  <% if @shops.present? %>
      <%= render partial: '/shops/receipt_per_shop', collection: @receipts_per_shop %>
  <% else %>
      <tbody><tr><td colspan="3"><%= t('no_records') %></td></tr></tbody>
  <% end %>
</table> 

部分ビュー _receipt_per_shop

<% @receipts_per_shop.each do |rs| %>
    <tr>
      <td><%= rs.name %></td>
      <td><%= rs.number_of_receipts %></td>
      <td><%= rs.total %></td>
    </tr>
<% end %>
于 2013-05-11T20:50:20.567 に答える