我有两个模型 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相对较新(并且对于加入来说是全新的)所以任何帮助都会受到赞赏。
答案 0 :(得分:1)
ForumThread.joins(:posts).where(:posts => {:priority => 1})
答案 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)
,它会返回一组帖子。