Rails - 使用包括减少查询

时间:2015-02-23 15:37:25

标签: ruby-on-rails ruby ruby-on-rails-4

这是我的控制者:

@trainings = Training.includes(:courses).order(:id, 'courses.order_id ASC')

在我看来,对于每次训练,我需要循环3次并检查是否有一个带有order_id列的课程,其中包含以下值:

@trainings.each do |training|
    for course_order in (1..3) do
        this_course = training.courses.find_by(order_id: course_order)
        # this_course.image(:resized) #i can print the paperclip image
    end
end

上面的代码 执行了很多查询,因此我尝试使用select方法:

@trainings.each do |training|
    for course_order in (1..3) do
        this_course = training.courses.select { |course| course.order_id = course_order }
        # this_course.image(:resized) #I cannot print paperclip image, because the result is an Array, so doesn't know the method "image"
    end
end

所以我只有一个查询,但我无法从我的模型中调用image方法,因为结果是一个Array对象。

我知道我可以使用:

training.courses.each do |course|
    # course.image(:resized)
end

我将只获得一个查询,但我必须循环3次,所以当我没有行时,我可以打印占位符图像,如:

Example image http://www.onrails.com.br/order_id.jpg

1 个答案:

答案 0 :(得分:1)

你的

this_course = training.courses.find_by(order_id: course_order)

返回匹配条件的第一条记录,但

this_course = training.courses.select { |course| course.order_id == course_order }

选择符合条件的所有课程。如果您只想查找第一个,请使用.detect代替.select

this_course = training.courses.detect { |course| course.order_id == course_order }

你也有错字。 =用于分配,==用于比较。