2013-10-09 31 views
0

我想合併兩個ActiveRecord :: Relation數組來將跨越問題和答案的搜索結果放在一起。我需要結果以單個ActiveRecord :: Relation數組的形式出現,以便我可以進一步操縱它。合併ActiveRecord ::具有不同列的關係數組

下面是代碼:

question_results = Question.where("(body || title) LIKE ?", "%#{@search}%") 
answer_results = Answer.where("body LIKE ?", "%#{@search}%").group("question_id") 
questions = question_results.merge(answer_results) 

當我這樣做,我得到以下錯誤:

SQLite3::SQLException: no such column: question_id: SELECT "questions".* FROM "questions" WHERE ((body || title) LIKE '%cosby%') AND (body LIKE '%cosby%') GROUP BY question_id 

發生這種情況,因爲這兩個表具有不同的列,特別是因爲做題沒有question_id列。

是否有可能將這兩個結果合併到一個搜索結果中,並仍然返回ActiveRecord :: Relations?我該怎麼做?

回答

-1

關係對象可以轉換爲數組。這否定隨後能夠使用他們的任何ActiveRecord的方法

questions = question_results + answer_results 
+1

謝謝,但我特別試圖以ActiveRecord :: Relation數組的形式得到答案。 – dmanaster

+0

您是否嘗試添加has_many並且屬於模型中的關係 –

+1

模型已經具有has_many和belongs_to關係。我沒有看到相關性。 – dmanaster

1

您可以使用連接到兩個表中檢索字段時,它們之間可用映射。說問題(:身份證,:身體:標題)的has_many答(:身份證,:身體:標題),那麼你可以使用連接來獲取所有字段:

Question 
.joins(:answers) 
.select('questions.id as question_id, answers.id as answer_id') 
.where("questions.body ilike ? or questions.title ilike ?",keyword, keyword) 
.where("answers.body ilike ? or answers.title ilike ?",keyword, keyword) 
.order('question_id') 

對於樣品我已經摘下幾個字段,但您可以包含來自兩個模型的任何字段。對於具有相同字段名稱的表,也使用別名(如question_id,answer_id)。

希望它有幫助。

相關問題