2013-02-21 46 views
1

我有一個QuestionCategory模型,他有許多問題。將條件傳遞給子查詢 - rails activerecords

當我做這個查詢@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問題* FROM問題WHERE questions.questions_category_id = 2 AND MY CONDITIONS

可能? 乾杯隊友

+0

你使用導軌2或3? – jvnill 2013-02-21 14:52:37

回答

0

要獲取導致您SQLSELECT questions.* FROM questions WHERE questions.questions_category_id = 2 AND MY CONDITIONS),你可以做如下:

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

這就是我想要的結果,但我想通過調用單行'QuestionsCategory.find(:all)'將這個條件自動應用到子查詢中。對於每個子查詢,它始終是相同的條件。否則,我必須做一個循環... – Gozup 2013-02-21 14:45:34

+0

然後你需要使用'join':'QuetionsCategory.joins(:questions).where(Your conditions)' – codeit 2013-02-21 15:04:41

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

0

你需要默認範圍在您的模型中。

把這個放在你的QuestionCategory模型中。

default_scope joins(:questions).where(conditions) 

然後

QuestionCategory.all應該給您預期的結果。