2013-04-06 44 views
0

我已經寫了下面的方法來結合Sections模式References和它的孩子們:Rails的陣列條件查詢

def combined_references 
    ids = [] 
    ids << self.id 
    self.children.each do |child| 
     ids << child.id 
    end 
    Reference.where("section_id = ?", ids) 
    end 

section.combined_references返回以下錯誤:

Mysql2::Error: Operand should contain 1 column(s): SELECT `references`.* FROM `references` WHERE (section_id = 3,4) 

它似乎有收集了正確的ID值,我是否錯誤地構建了查詢?

回答

5

最後一行變換到:

Reference.where(section_id: ids) 

,它應該產生:

SELECT `references`.* FROM `references` WHERE section_id IN (3,4) 

,您可以通過一個符合縮短代碼:

ids = [] 
ids << self.id 

ids = [self.id] 
2

這是無效的聲明 WHERE(SECTION_ID = 3,4) 正確會

WHERE (section_id in (3,4)) 

請使用:

Reference.where(:section_id => ids) 
2

你可以嘗試這樣的事情,而不是:

def combined_references 
    ids = self.children.map(&:id).push(self.id) 
    Reference.where(section_id: ids) 
end 

您也可以通過以下方式查詢數據庫:

Reference.where("section_id in (?)", ids) 

下在我看來最可讀性:

def combined_references 
    Reference.where(section_id: self_and_children_ids) 
end 

private 

def self_and_children_ids 
    self.children.map(&:id).push(self.id) 
end 
+0

很不錯! :) – Zippie 2013-04-06 22:17:42