Rails 3:链接`has_many`与最后一个表的条件的关系,没有过多的查询

问题描述:

我对数据库和Rails(使用3.2)都是新手,我怀疑这是一个基本问题,我只是无法找到答案为。Rails 3:链接`has_many`与最后一个表的条件的关系,没有过多的查询

我正在制作一个应用程序,用于跟踪人们提交给期刊的文章。所以,每个用户都有一些文章。对于每篇文章,他们都可以将其提交给一些期刊。提交对象本身不仅跟踪提交的文章和提交的日志,还跟踪提交日期,提交方式(电子邮件,在线系统等),收到回复的日期(如果有的话),回复(如果有的话)(例如接受,重新提交,拒绝)。

我试图让用户在一个地方查看他们的所有优秀提交。因此,对于每一个用户,我想查询数据库来获取所有提交属于文章属于该用户,但只返回了其响应是空的意见书(意思是有没有反应呢,和因此提交仍然很好)。

所以我的模型的关系如下:现在

class User < ActiveRecord::Base 
    has_many :articles 
end 

class Article < ActiveRecord::Base 
    belongs_to :user 
    has_many :submissions 
end 

class Journal < ActiveRecord::Base 
    has_many :submissions 
end 

class Submission < ActiveRecord::Base 
    belongs_to :article 
    has_one :journal 
end 

,对于给定@user,我想我可以做类似

@articles_with_subs = @user.articles.joins(:submissions) 

然后

@out_subs = Array.new 
@articles_with_subs.each do |article| 
    outs = article.submissions.where("response NOT NULL") 
    @out_subs.push outs 
end 
@out_subs.flatten! 

但这似乎相当低效。我错过了什么可能很大很明显的事情?

非常感谢。

@out_subs = Submission.where("response NOT NULL") 
    .joins(:article).where(:article => {:user_id => @user.id}) 
+0

啊哈,所以我是从用户而不是从意见反馈。谢谢! – bwk 2012-03-21 19:52:10