我很擅长在rails中构建API,我目前处于需要使用当前活动记录序列化程序对象和使用作用域传递给它的另一个对象的情况。使用这些对象,我需要从序列化器def运行一个Join(Active Record Query Interface)来查找特定数据。
虽然相同的查询在rails控制台中运行得相当好,但尝试在序列化程序中执行它会引发“没有这样的方法错误”。
Section.joins(question_papers_sections: :questions).where('questions.id = object.id AND question_papers_sections.question_paper_id = current_exam_candidate.exam.question_paper.id')
我可以在这里访问Section对象(尝试使用binding.pry),也可以访问序列化程序对象,并且也可以访问current_exam_candidate。
答案 0 :(得分:1)
您可以在API的基本控制器中定义方法(如果有),或者在相对模型中定义方法。您还应该稍微更改一下您的查询,我举一个例子
示例:在您的控制器中
class Api::BaseController < ActionController::Base
serialization_scope :view_context
def find_question_section(object)
section = Section.joins(question_papers_sections: :questions).where("questions.id = ? AND question_papers_sections.question_paper_id = ? ", object.id, current_exam_candidate.exam.question_paper.id).last
end
end
在你的序列化器中
delegate :find_question_section , to: :scope
find_question_section(object)