0

次のモデルがあるとします。

class Item
  # (name, price, location, quantity)
  has_many :purchases
end

class Purchase
  has_many :items
  belongs_to :person
end

class Person
  # (name, age)
  has_many :purchases
end

「ボブ」という名前の人が購入した「cd」という名前の一意のアイテムをすべて検索する必要があります

次に、私の見解では、次のものが必要です。

  • @items一意のレコードを含める
  • @items.count数値を返す
  • ループ時に各アイテムのすべての属性にアクセスします。

    <% @items.each do |i| %>
      <%= "#{i.name}, #{i.locatiton}, #{i.quantity}" %>
    <% end %>
    
  • @items を ActiveRecord::Relation にする (ページ付けできるようにするため)

今までの私のクエリは次のようになります。

@items = Item.joins(:purchase => :person).where('person.name' => 'bob')

@items をそのままにしておくと、重複するアイテムが含まれるという問題があります

私が試したこと:

1)@items.uniq 重複を削除しますが、配列を返します。ActiveRecord::Relation が必要です

2)@items.select('distinct(items.name)') 重複を削除しますが、item.name のみを含むリレーションを返し、すべての属性が必要です

3)@items.group('items.name') 重複を削除してリレーションを返しますが、count メソッドは数値ではなく OrderedHash を返します はい キーを数えることはできますが、リレーションで count メソッドを呼び出したときに数値を返す他のリレーションに対して同じビューを持っています。

他に何を試すべきか本当にわかりません。何か提案はありますか?

4

1 に答える 1

0

私はあなたができると思います:

@items.select("DISTINCT(`items`.`name`), `items`.*")

アイテムから必要なものを使用します。試してみましたか?

于 2012-02-16T14:25:45.337 に答える