Ruby on rails 使用Rails和active record在2个外键上左键连接
我有3个目标:Ruby on rails 使用Rails和active record在2个外键上左键连接,ruby-on-rails,postgresql,rails-activerecord,eager-loading,Ruby On Rails,Postgresql,Rails Activerecord,Eager Loading,我有3个目标: Question - id - question Answer - question_id - user_id - answer User - id 一个答案属于一个用户和一个问题 我想得到每一个问题和他们的答案。 我想要特定用户的答案 我已经尝试了两个查询,但没有人能像预期的那样工作 在这种情况下,如果用户回答了问题。第二个用户查询将返回一个空值 #@questions = Question.includes(:answer).where(answers: { user_
Question
- id
- question
Answer
- question_id
- user_id
- answer
User
- id
一个答案属于一个用户和一个问题
我想得到每一个问题和他们的答案。 我想要特定用户的答案 我已经尝试了两个查询,但没有人能像预期的那样工作 在这种情况下,如果用户回答了问题。第二个用户查询将返回一个空值
#@questions = Question.includes(:answer).where(answers: { user_id: [@user.id, nil] })
这一个使用postgres返回预期的数据,但是Rails会对每个问题发出请求以获得答案,但不使用用户id上的条件
#@questions = Question.joins('left join answers on answers.question_id = questions.id and answers.user_id = @user_id')
我想为每个用户生成这种Json
[
{
id: 1,
question: 'question',
answer: { id:22, answer: 'answer' }
},
{
id: 2,
question: 'question2',
answer: { id:23, answer: 'answer' }
},
{
id: 3,
question: 'question3',
answer: null
},
]
欢迎任何帮助
我无法理解这一点“我希望获得所有问题,如果有,他们的关联答案也会与当前用户关联。”您是否想要所有属于当前用户的问题?整个情况完全没有意义。这就像说我想要所有的苹果都是红色的或不是红色的。如果你想加入答案和问题,你可以用
question.includes(answer::user)
改为编辑问题:)这听起来像是你想使用左外连接
你读过这篇文章吗?我发布了以下内容:#@questions=Question.joins('leaft join answers on answers.Question_id=questions.id和answers.user_id=@user_id'))