簡體   English   中英

不按相關領域加入

[英]Joins not by related field

我有兩個模型:
問題(id,文本,部分,因子)
答案(id,question_id,selected)

問題has_many:answers答案所屬分類:question

我的目標是找到問題的因素,即哪個文本等於答案的選定字段,而我僅從答案中搜索

為了表明我的意思,這是給出我預期結果的SQL

SELECT questions.factor FROM answers INNER JOIN questions 
ON questions.text = answers.selected WHERE answers.id = 5

在Rails中,我嘗試使用連接

answers.joins(:question).where('questions.section = 4').where
('answers.selected = questions.text')

但是結果並不准確,正如我在控制台導軌中看到的那樣,它包括通過相關字段“ questions”進行連接。“ id” =“ answers”。“ question_id”

SELECT "answers".* FROM "answers" INNER JOIN "questions" ON
"questions"."id" = "answers"."question_id" WHERE "answers"."participant_id" = $1 
AND (questions.section = 4) AND (answers.selected = questions.text)

好吧,我相信Ruby的魅力應該在這里起作用,請為我提供一些獲得想要的結果的絕妙方法。

謝謝。

使用answers.joins(:question)將建立總是產生INNER JOIN "questions" ON "questions"."id" = "answers"."question_id"因為那是多么belongs_to :question關聯定義Answer

但是你可以傳遞一個字符串join你所需要的條件。 這樣的事情(對於id = 5條件where您可能需要附加where ):

answers.joins('INNER JOIN questions ON questions.text = answers.selected')

@spickermann的回答很明確! 並以誠摯的態度使用它。 但是,有了這個問題,我開始與Arel探討如何做到這一點,並提出了:

custom_join = Answer.joins(:questions).on('questions.text = answers.selected').join_sources
# above will return an array with an inner join representation in Arel
Answer.joins(custom_join).where('questions.section = 4')
#=> ActiveRecord::Relation result

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM