我在我的一个模型中使用以下代码
def jasper_amount
ActionController::Base.helpers.number_to_currency(amount)
end
我知道它破坏了MVC。但是,在这种情况下,它是最好的解决方案。我必须通过Ruby Java Bridge将数据传递给Jasper,并且Jasper中的格式化会复杂得多。
从rails控制台调用object.jasper_amount
工作正常并打印预期结果。这在开发和生产中很好用。
现在,要将数据传递给Jasper,我首先必须使用object.to_xml(methods: [:jasper_amount]).to_s
创建对象属性的xml版本。这适用于开发但不适用于生产。在生产中,传递给Jasper的jasper_amount
的值为“0.00€”。但是,如果我从number_to_currency
中删除def jasper_amount
(只返回未格式化的amount
),则可以正常工作。更令人困惑的是,在制作中从rails控制台调用jasper_amount
这一事实。我猜罪魁祸首必须是to_xml
,但我不知道为什么它在开发中起作用而不在生产中。
答案 0 :(得分:0)
问题在于Ruby Java Bridge(rjb)和BigDecimal。如果将BigDecimal与rjb一起使用,则必须包含" BigDecimal"你的Gemfile中的gem。否则你所有的BigDecimal都将为0(并且你的应用程序遍布你的全部!)