2016-05-01 13 views
0

私はこの質問をどのように行うべきか分かりませんでした。私はRuby on Railsには新しく、すべてを一緒に作る方法をまだ考えています。Rails 4グループの重複

私には書籍、注文書、製品、ユーザーがあります。特定のビュー内で、ユーザーごとに1つのproduct_idを表示したい - ほとんどのユーザーは同じproduct_idを複数回持ちます。

ここに私の本があります。私の本コントローラで

<% @orders.each do |order| %> 
    <% order.product.books.each do |book| %> 
     <%= link_to book.title %> 
    <% end %> 
    <% end %> 

私はこのすべてがうまく機能し、私はorder.created_atを呼び出すまで行方不明を与える(ビューは重複があっても、注文PRODUCT_IDにつき1 PRODUCT_IDを示して)

 def index 
     @orders = Order.select(:product_id).distinct 
     @books = Book.page params[:page] 
     end 

を持っています属性エラー。私はこのエラーが私が要求しているのは知っているからです:注文時のproduct_idですが、私が追加するときは:created_at (@orders = Order.select(:product_id, :created_at).distinct)を選択クエリに追加します:product_ids。

私には何が欠けていますか?

答えて

0

さて、そのように見えるものについて考える必要があります。別のproduct_idで行を選択するときは、同じproduct_idを持つ他のすべての行を破棄します。しかし、created_atをミックスに追加すると、distinctproduct_idの代わりに(product_id, created_at)のタプルに対して操作されているため、結果のレコードセットに同じproduct_idが含まれます。

お客様のオリジナル@ordersは、実際にすべての注文ではなく、product_idごとに固有のものを選択したため、一部のサブセットです。私はそれが役に立つのActiveRecordから出てくる実際のSQLが何をしているかを確認するために、クエリの最後にto_sqlを追加するために見つける

> Order.select(:product_id).distinct.to_sql 
=> SELECT DISTINCT "orders"."product_id" FROM "orders" 

> Order.select(:product_id, :created_at).distinct.to_sql 
=> SELECT DISTINCT "orders"."product_id", "orders"."created_at" FROM "orders" 

は、データベース内のを実行してみてください、あなたはどのようなデータがわかりますActiveRecordはActiveRecordインスタンスを構築するために使用しており、ActiveRecordはそれに基づいてデータや製造オブジェクトに戻ってくる行を取り込むだけであることを認識しています。

+0

これは多くの意味があります。ありがとうございました。これを正しく動作させるための推奨がありますか?たぶん私は間違った方法でそれについて行くつもりです。 – jgrant

関連する問題