2010-08-29 26 views
8

我想在控制器中格式化数字,然后再将其插入到字符串中。但函数number_with_delimiter()在控制器中不起作用。 我需要将字符串发送给JavaScript插件。如何格式化轨道上的红宝石号码控制器,number_with_delimiter只适用于视图

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

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

是否有替代函数来更改p.price的格式?

+0

你可以参考我的答案在这里http://stackoverflow.com/questions/4467697/rails-why-the-number-with-delimiter-method-is-not-recognized-inside-my-model/25979370# 25979370 – 2014-09-22 17:01:49

回答

17

直接回答你的问题,包括在你的控制下(通常在顶部附近,下方class声明):

include ActionView::Helpers::NumberHelper 

你也可以在模型中包含该模块(无论什么阶级p是) ,然后编写一个函数来返回格式化的价格。

然而,像这样的代码最好的地方是帮手,而不是控制器。该帮助者将从视图中被调用。你的控制器应该尽可能短并且根本不包含任何视图逻辑。

+0

好的,非常感谢..很好的建议!我确实会把它移交给帮手。 – 2010-08-29 20:11:10

10

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

> ActiveSupport::NumberHelper.number_to_delimited(100000) 
=> "100,000" 

这避免了包括所有使用的ActionView方法在你的对象不必要的。

1

滑轨控制器具有访问相同的背景下,的ActionView渲染器使用view_context属性,而不必混入多个视图助手模块:

class BaseController < ApplicationController                          
    def index 
    # Accessing view the context 
    logger.info view_context.number_to_currency(34) 
    end 
end 

这具有以下优点,以具有所有视图助手完成接入以及就像您可能已经设置的任何特殊配置(即i18n设置)。

+0

这比IMO接受的答案要好 – Darwayne 2017-05-20 17:06:26