假设我的Rails4应用程序中有以下设置:
学生has_many
学位,学位belongs_to
学生。我有一个StudentPresenter和一个DegreePresenter也对应这两个模型。 (演讲者as defined here)
我想查询以下内容:
student_ids = [1,2,3,4]
students = Student.where(id: student_ids).includes(:degrees)
但我希望能够访问学生和学位的Presenter方法。
如何使用演示者预加载数据?
Rails 4.1.5
答案 0 :(得分:0)
您链接到的博客文章中的演示者只是简单的ruby对象,在创建新演示者时将模型作为参数之一:
创建StudentPresenters:
students = Student.where(id: student_ids).includes(:degrees)
decorated_students = students.map { |s| StudentPresenter.new(s, view_context) }
然后你可以向StudentPresenter
添加一个返回装饰度数的方法;
class StudentPresenter < BasePresenter
def degrees
@model.degrees.map { |d| DegreePresenter.new(d, @view) }
end
end
预加载如何工作?由于您使用的是includes
使用includes,Active Record确保所有指定的 使用尽可能少的查询加载关联。
Rails应该在您students.map
后立即加载学生表和学位。