Rails находит с тремя таблицами и операцией SUM - PullRequest
2 голосов
/ 12 августа 2010

Я немного озадачен тем, как получить порядок записей, которые я хочу, с помощью операции поиска.

Допустим, у вас было три модели: 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 голосов
/ 12 августа 2010

Думать, что я потратил день на то, чтобы выдернуть свои волосы, когда через час после того, как опубликовал этот вопрос, я нашел решение.

В модели веб-сайта я указал, что веб-сайт has_many :points, through => :links

Тогда запрос:

array = Website.find(:all)

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

Кажется, это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...