Rails找到三个表和一个SUM操作

时间:2010-08-11 20:57:07

标签: sql ruby-on-rails activerecord

为了通过查找操作获取我想要的记录顺序,我有点难过。

假设您有三种型号: 1.网站 2.链接 3.投票

网站有很多链接,链接有很多选票。每个投票都有一定数量的点,用户可以将这些点归于该投票。我正在尝试获取一个网站索引页面,其中网站按照他们收到的网站所有链接的总和顺序列出。

这是架构的简化版本

  create_table "votes", :force => true do |t|
    t.integer  "link_id"
    t.integer  "points"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "user_id"

  end

  create_table "links", :force => true do |t|
    t.string   "name"
    t.string   "link"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "user_id"
    t.integer  "votes_count", :default => 0
    t.integer  "website_id"
  end

  create_table "websites", :force => true do |t|
    t.string   "domain"
    t.boolean  "verified",          :default => false
    t.integer  "user_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

我正在考虑在这里使用正确的活动记录查询。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

在我发布这个问题一小时后,当我想出解决方案时,我想我花了一天时间把头发拉了出来。

在网站模型中,我将网站has_many :points, through => :links

然后查询:

array = Website.find(:all)

array.sort_by {|w| w.donations.sum('amount')}.reverse

这似乎有效。