1

假设我的 Rails4 应用程序中有以下设置:

一个学生has_many学位,一个学生学位belongs_to。我也有对应于这两个模型的 StudentPresenter 和 DegreePresenter。(此处定义的演示者)

我想查询以下内容:

student_ids = [1,2,3,4]
students = Student.where(id: student_ids).includes(:degrees)

但我想访问 Student 和 Degree 的 Presenter 方法。

如何使用 Presenter 预加载数据?

导轨 4.1.5

4

1 回答 1

1

您链接到的博客文章中的演示者只是简单的 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

使用包含,Active Record 确保使用尽可能少的查询来加载所有指定的关联。

Rails 应该尽快加载学生表和学位students.map

于 2015-04-21T21:51:05.603 回答