Active Record查询

时间:2012-02-05 16:58:28

标签: ruby-on-rails activerecord join

我有两个模型 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

我想创建一个返回所有论坛帖子的查询,其中每个帖子中至少有一个帖子的优先级为1。 如何创建此查询?

我一直在考虑像ForumThread.joins(:posts).select(:priority => 1)这样的事情。我对Active Record相对较新(并且对于加入来说是全新的)所以任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

ForumThread.joins(:posts).where(:posts => {:priority => 1})

请参阅join with conditions

答案 1 :(得分:1)

首先,您应该将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),它会返回一组帖子。