我在Rails应用程序中有一个非常简单的Ruport设置,其中Ruport控制器被传递Report::Data::Table
个实例:
class Reporter < Ruport::Controller
stage :headline, :data, :footer
required_option :report
def setup
report_klass = options.report.report_model
report_klass ||= Report
self.data = report_klass.send(:report_table_by_sql, options.report.query)
end
end
当被要求渲染时,存储在数据中的Data::Table
实例使用Ruport::Data::Table
作为其委托控制器,这样当我稍后调用
output << data.to_html
如何告诉数据将其呈现方法委托给Reporter类,所以我的所有钩子覆盖都可以存在于一个地方?
答案 0 :(得分:1)
Ruport格式化程序被设计为封装在一个继承自Formatter的单独类中。 我相信类似的东西会达到你想要的效果:
# Inherits all the default build methods from the HTML Formatter
class ReporterTableHTMLFormatter < Ruport::Formatter::HTML
# Sets this class to render Ruport Tables
# (Data instead of Controller may also work, the code path is a bit unclear/overloaded)
renders :html, :for => Ruport::Controller::Table
# Build table row
def build_row(data)
...
end
end
答案 1 :(得分:1)
Ruport的API documentation清楚地表明您可以注册多个Formatter
的{{1}}个后代,所以如果你想拥有一个实现所有钩子的格式化程序,你可以简单地多说:
Controllers