这是我的控制者:
@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次,所以当我没有行时,我可以打印占位符图像,如:
答案 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 }
你也有错字。 =
用于分配,==
用于比较。