次のモデルがあるとします。
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 メソッドを呼び出したときに数値を返す他のリレーションに対して同じビューを持っています。
他に何を試すべきか本当にわかりません。何か提案はありますか?