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

我需要找到名为“bob”的人购买的所有名为“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 回答