[英]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.