1

我有一个 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} ])

然后得到如下所示的子查询:

SELECT questions.* FROM questions WHERE questions.questions_category_id = 2AND MY CONDITIONS

可能的?欢呼队友

4

3 回答 3

0

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

  QuetionsCategory.find(2).questions.all(:conditions => [Your conditions])
于 2013-02-21T14:37:04.457 回答
0

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

将此放入您的 QuestionCategory 模型中。

default_scope joins(:questions).where(conditions)

然后

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

于 2013-02-21T15:29:31.267 回答
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

于 2013-02-21T15:23:02.940 回答