我的rails应用程序会更改项目的状态,但是当它这样做时,用户可能会遇到潜在的错误。我正在开发一种方法,允许用户覆盖这些错误,然后创建一个pdf报告,以便他们可以打印出来作为他们所做的收据。
以下是开发报告并完成每个项目操作的代码:
def report
ids = params[:ids].split()
@items = Item.order("id").where(id: ids)
respond_to do |format|
format.html
format.pdf { prawnto(page_size: "A4", inline: true)}
end
@items.each do |item|
item.action
end
end
我的问题是,为了测试错误(例如,项目的不兼容状态),我需要在行动生效之前测试项。
到目前为止我完成的每项测试都表明在报告完成之前正在评估items.each do block。我的应用需要反向。
对于为什么会出现这种行为的任何帮助和/或解释都将非常感激。
答案 0 :(得分:1)
控制器代码在执行任何渲染之前运行完成。移动订单在这里没有任何作用,因为您为pdf
格式提供的块将被忽略,直到最后。由于您已经定义了它,因此没有义务立即执行它。
如果您确实首先需要它,请捕获报告的结果,然后在渲染方法中使用它:
# Execute the report immediately.
report_pdf = prawnto(...)
respond_to do |format|
format.pdf { report_pdf }
end