如何格式化rails控制器上的ruby中的数字,number_with_delimiter仅在视图中有效

Mic*_*rfs 10 ruby-on-rails

我想在将数字插入字符串之前格式化控制器中的数字.但函数number_with_delimiter()在控制器中不起作用.我需要将字符串发送到javascript插件.

我可以在视图中运行代码,但我想这不是最好的选择.

@mycarousel_itemList = @mycarousel_itemList + "{url: '" + p.photo.url(:thumb) + 
"', price: '" + p.price.to_s + " €'}," 
Run Code Online (Sandbox Code Playgroud)

是否有替代功能来改变p.price的格式?

wup*_*tah 21

要直接回答您的问题,请在控制器中包含以下内容(通常位于class声明下方的顶部附近):

include ActionView::Helpers::NumberHelper
Run Code Online (Sandbox Code Playgroud)

您还可以在模型中包含此模块(无论类p是什么),然后编写函数以返回格式化的价格.

然而,像这样的代码的最佳位置是帮助程序,而不是控制器.将从视图中调用帮助程序.您的控制器应尽可能短,并且根本不包括任何视图逻辑.


fot*_*kis 16

只需ActiveSupport::NumberHelper直接调用底层方法:

> ActiveSupport::NumberHelper.number_to_delimited(100000)
=> "100,000"
Run Code Online (Sandbox Code Playgroud)

这样可以避免不必要地在对象中包含所有ActionView方法.