将条件传递给子查询 - rails activerecords

时间:2013-02-21 14:33:36

标签: sql ruby-on-rails rails-activerecord

我有一个QuestionCategory模型,他有很多问题。

当我执行此查询时@quizzs = QuestionsCategory.find(:all)一切正常。它正在查询所有的灾难和相关问题:

QuestionsCategory Load (0.2ms)  SELECT `questions_categories`.* FROM `questions_categories` 
  Question Load (0.3ms)  SELECT `questions`.* FROM `questions` WHERE `questions`.`questions_category_id` = 1
  Question Load (0.4ms)  SELECT `questions`.* FROM `questions` WHERE `questions`.`questions_category_id` = 2
  Question Load (0.3ms)  SELECT `questions`.* FROM `questions` WHERE `questions`.`questions_category_id` = 3

但是,我想将条件传递给问题子查询。就像是 @quizzs = QuestionsCategory.find(:all, :questions => [ :conditions => {MY CONDITIONS} ])

然后让子查询看起来像这样:

选择问题。* FROM问题WHERE questions.questions_category_id = 2 AND MY CONDITIONS

可能? 干杯伙伴

3 个答案:

答案 0 :(得分:0)

要获得SQLSELECT questions.* FROM questions WHERE questions.questions_category_id = 2 AND MY CONDITIONS)的结果,您可以执行以下操作:

  QuetionsCategory.find(2).questions.all(:conditions => [Your conditions])

答案 1 :(得分:0)

范围怎么样?

问题类别控制器:

def your_action_name
  @quizzs = QuestionsCategory.all.collect{|qc| qc.questions.published == true}

问题模型:

class Question < ActiveRecord::Base
  scope :published, where(:published => true)
end

通过这种方式,您可以将要应用的所有范围(条件)链接到Question

答案 2 :(得分:0)

您需要默认范围在您的模型中。

将此问题放入您的QuestionCategory模型。

default_scope joins(:questions).where(conditions)

然后

QuestionCategory.all应该给你预期的结果。