0

当使用 Ruport 为包含相同实体的实体创建 CSV 文件时,生成的列名会产生冲突,导致 Ruport 仅显示此列的第一次出现。为了让这个抽象的解释更清晰、更简单,举个例子:

我的类Zone继承自ServerUnitConfig,它有一个:belongs_toto ServerUnitZone例如,server_unit.su_name作为一个领域。 Zone还有一个:belongs_tofor Domain,它也继承自ServerUnitConfig.

我希望两者都包含在我的 Ruport 中,为此我:include对我的 Ruport 有以下论点report_table

{            
    :server_unit => {:only => 'su_name'}, 
    :domain => {:include => {:server_unit => {:only => 'su_name'}}, :only => {}
}

server_unit.su_name在 CSV 文件中使用Ruport报告这一点,给出的报告仅显示server_unit不是Domain. 通常也server_unit.su_name应该显示,但由于 Ruport 仅显示字段名称及其父项,因此两种情况都会显示server_unit.su_name,这会产生冲突。

我建议给包含中的字段一个自定义名称,但我不知道如何。如果可能的话,另一个想法是告诉 Ruport 以一种或另一种方式拥有相同的列名是没有问题的,但我认为这是不可能的。有没有人有解决这个问题的想法?这对我有很大帮助!

谢谢

大安

4

1 回答 1

0

您可以使用 report_table_by_sql 方法,这有点难看。或者使用 :method 选项调用名称稍有不同的方法,也不是很好。

每个内部使用的包含都有一个 :qualify_attribute_names 选项。我在这里写了一个补丁:https ://gist.github.com/1057518会暴露它,你可以像这样使用它:

{:server_unit => {:qualify_attribute_names => 'serv', :only => 'su_name'}}

要应用补丁,您需要在 Rails 中“供应”acts_as_reportable gem,这可能会很痛苦。当我确定它没有问题时,我会尽快将它放在https://github.com/ruport/acts_as_reportable的主仓库中。

希望有帮助,安德鲁

于 2011-06-30T23:21:52.737 回答