RoR中多对多关系中的前10项

时间:2009-10-05 14:51:50

标签: ruby-on-rails many-to-many

我有一个包含两个表的数据库:标签和项目。

每个项目都有一个分数,得分最高的项目是最受欢迎的。标签和商品之间存在多对多的关系。

获取属于标签的所有项目非常简单。 (= tag.items)但是如何检索属于此标记的10个最受欢迎的项目?

所以实际上我需要相当于红宝石的红宝石 SELECT * from items INNER JOIN item_tags ON items.id = item_tags.item WHERE item_tags.tag = :tagid ORDER BY items.score DESC LIMIT 10

由于标签可能包含很多项目,我更喜欢让数据库执行此操作,而不是检索所有项目,然后手动过滤它们。 (如果有更快的方式来执行此操作,那肯定是受欢迎的!)

1 个答案:

答案 0 :(得分:4)

假设以下设置:

class Item < ActiveRecord::Base
  has_and_belongs_to_many :tags
end

class Tag < ActiveRecord::Base
  has_and_belongs_to_many :items
end

你应该可以这样做:

@tag = Tag.find(PARAMS)
@tag.items.find(:all, :order => "items.score DESC", :limit => 10)

如果您想让它更加流畅,请将此行添加到您的Item类中:

named_scope :popular, :order => "items.score DESC", :limit => 10

然后你可以打电话

@tag.items.popular
相关问题