此查询返回所有提交的问题,这些问题提交的 rubric_item_evaluations 的值为 Present=true,并且评分细则项的值为 @rubric_item.id
submissions_to_update = QuestionSubmission.joins(:rubric_item_evaluations).where(:rubric_item_evaluations => {:present => true , :rubric_item_id => @rubric_item.id})
然后我们销毁标题项
@rubric_item.destroy
然后我们迭代提交内容以重新评分
submissions_to_update.each do |submission|
submission.grade!
end
但由于某种原因,question_submissions_update 之后会在 .each 上被查询!到那时它不会查询正确的东西(返回一个空数组)。我很困惑...为什么它不查询初始变量赋值?
所以总结查询似乎发生在这里
submissions_to_update = QuestionSubmission.joins(:rubric_item_evaluations).where(:rubric_item_evaluations => {:present => true , :rubric_item_id => @rubric_item.id})
@rubric_item.destroy
# Query for submissions_to_update happening after I destroy the rubric item
submissions_to_update.each do |submission|
submission.grade!
end
如果需要的话我可以显示SQL语句!
更新 我有必要在销毁标题项之前实际执行查询。
最佳答案
当你写下这个:
submissions_to_update = QuestionSubmission.joins(:rubric_item_evaluations).where(:rubric_item_evaluations `=> {:present => true , :rubric_item_id => @rubric_item.id})
您正在构建一个 ActiveRecord::Relation,这是事件记录格式的查询本身,但最终您只是构建一个查询而不是执行它。
然后你刚才说在构建查询后你销毁了@rubric_item,所以之前构建的查询之后会变得错误。 @rubric_item.id 不再存在于数据库中,因此联接查询将找不到任何记录。
您需要在销毁项目之前检索问题,因此实际上您需要在销毁 rubric_item 之前执行重新评分过程,例如:
submissions_to_update = QuestionSubmission.joins(:rubric_item_evaluations).where(:rubric_item_evaluations => {:present => true , :rubric_item_id => @rubric_item.id})
submissions_to_update.each do |submission|
submission.grade!
end
@rubric_item.destroy
关于ruby-on-rails - Rails - Active Record 查询不查询变量赋值(想要立即加载),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29861255/