Активная запись запроса - PullRequest
0 голосов
/ 05 февраля 2012

У меня есть две модели ForumThread и Пост настройки, как это:

class ForumThread < ActiveRecord::Cached
    has_many :posts
end

class Post < ActiveRecord::Cached
end

class CreateForumThreads < ActiveRecord::Migration
    def self.up
        create_table :forum_threads do |t|
            t.column :thread_name, :text
        end

        add_index :forum_threads, :thread_name
    end

    def self.down
        drop_table :forum_threads
    end
end

class CreatePosts < ActiveRecord::Migration
    def self.up
        create_table :posts do |t|
            t.column :post_body, :text
            t.integer :forum_thread_id, :null => false
            t.integer :priority
        end
    end

    def self.down
        drop_table :posts
    end
end

Я хотел бы создать запрос, который возвращает все темы форума, где в каждой теме есть хотя бы одно сообщение с приоритетом один. Как мне создать этот запрос?

Я думал о чем-то вроде ForumThread.joins(:posts).select(:priority => 1). Я относительно новичок в Active Record (и совершенно новый для присоединений), поэтому любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 05 февраля 2012

Прежде всего следует переименовать поле thread_id в forum_thread_id в таблице posts и добавить posts_count в таблицу forum_threads.

В Post добавить класс belongs_to :forum_thread, :counter_cache => true

Теперь вы можете запросить ForumThread.where("posts_count > ?", 1).joins(:posts).where("posts.priority = ?", 1), который вернет вам коллекцию сообщений.

1 голос
/ 05 февраля 2012
ForumThread.joins(:posts).where(:posts => {:priority => 1})

см. присоединиться с условиями

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