2011-06-28 10 views
0

Ruportを使用して同じエンティティを含むエンティティのCSVファイルを作成すると、生成された列名が競合し、Ruportにこの列の最初の発生のみが表示されます。 ServerUnitから:belongs_toを持っているRuportレポートテーブルの列名の競合

私のクラスServerUnitConfigからZone継承、:、この抽象説明がより明確にし、より少ない複雑な例を作るために。 したがって、Zoneはフィールドとしてたとえばserver_unit.su_nameとなります。 Zone:belongs_toDomainであり、これもServerUnitConfigから継承しています。

私は両方とも私のRuportに含まれるようにしたいと、これを行うために、私はRuportの私のreport_tableため、次の:includeの引数があります。

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

は、CSVファイルでRuportでこれを報告し、のみ示すレポートを提供しますserver_unit.su_nameの列がserver_unitではなく、Domainのいずれかです。通常はserver_unit.su_nameも表示する必要がありますが、Ruportはフィールド名とその親だけを表示するので、どちらの場合もserver_unit.su_nameと表示され、これにより競合が発生します。

私は、インクルードのフィールドにカスタム名を与えることを提案しますが、私はどのようにわかりません。可能であれば、別のアイデアは、Ruportに、同じ列名を持つことに問題はないと言っているが、それは可能だとは思わない。誰かがこの問題を解決するアイディアを持っていますか?それは私の多くを助けるだろう!

おかげ

大安

答えて

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宝石必要があると思いパッチを適用するには痛み。すぐに私はそれが問題がないと確信しているときに私はしようとすると、https://github.com/ruport/acts_as_reportableでメインのレポに入れます。助け

希望、 アンドリュー

+0

はどうもありがとうございました、アンドリュー! – Daan

+0

私はすでに方法が実際に選択肢であることを知り、このように解決しました。あなたの:qualify_attribute_namesは、コードに便利な追加機能です。それはそれが作るわずかな違いのためにまだ多くの仕事ですが、それはまだ便利になる可能性があります。それは私が仮定する方法と同じですが、よりクリーンな方法で行います。 Thx ...あなたのプラグインについて私に知らせてください。 – Daan