Rails rails3 的查询语句问题

Star · 2012年12月12日 · 最后由 Star 回复于 2012年12月13日 · 3323 次阅读

我有这样一个需求: 三张表:users,checkins,bookmarks 关系:

class User < ActiveRecord::Base has_many :checkins has_many :bookmarks end

class Checkin < ActiveRecord::Base belongs_to :user end

class Bookmark < ActiveRecord::Base belongs_to :user end

在 rails3 中我该如何写能生成以下 sql:

select u.id, u.first_name, u.last_name, (select count() from bookmarks where user_id=u.id) as bookmarks, (select count() from checkins where user_id=u.id) as checkins from users u order by bookmarks desc

就是统计用户的 checkins 和 bookmarks 数量

  1. User 里面增加 chenkins_count, bookmarks_count 两个 int 型的字段
  2. Chenkin, Bookmark Model 的 belongs_to :user 改为 belongs_to :user, :counter_cache => true
  3. 查询:
User.all.select([:id,:first_name,:last_name,:checkins_count,:bookmarks_count]).order("bookmarks_count desc")

@huacnlee cool, 感谢,正是需要的,但是还有个小问题,我想统计的时候带上条件,可以实现吗?比如我不想统计一个 user 的所有 bookmarks,满足 bookmarks.value = 1 时才统计。我没找到方法,目前我只好使用过滤器

after_save :update_counter_cache after_destroy :update_counter_cache def update_counter_cache self.user.bookmarks_count = Bookmark.count( :conditions => ["value = 1 and user_id =?",self.user_id] self.user.save end

请问华顺兄有简单的办法吗?

#3 楼 @huacnlee 我也看过这个页面,下面有个人说 It doesn't work, It still only tries to update documents_count,我就没仔细看,我再试一下,谢谢的你帮助

Star 关闭了讨论。 03月03日 15:24
需要 登录 后方可回复, 如果你还没有账号请 注册新账号