Как отформатировать число в рубине на контроллере rails, number_with_delimiter работает только в представлениях - PullRequest
9 голосов
/ 29 августа 2010

Я хотел бы отформатировать число в контроллере, прежде чем вставить его в строку. Но функция number_with_delimiter () не работает в контроллере. Мне нужна строка для отправки в плагин JavaScript.

Я мог бы запустить код в представлении, но я думаю, что это не лучший вариант.

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

Есть ли альтернативная функция для изменения формата p.price?

Ответы [ 3 ]

20 голосов
/ 29 августа 2010

Чтобы ответить на ваш вопрос напрямую, включите в свой контроллер следующее (как правило, вверху, под объявлением class):

include ActionView::Helpers::NumberHelper

Вы также можете включить этот модуль в модель (какой бы класс p ни был), а затем написать функцию для возврата отформатированной цены.

Однако лучшее место для такого кода - помощник, а не контроллер. Помощник будет вызван из вида. Ваш контроллер должен быть как можно короче и вообще не включать никакой логики просмотра.

14 голосов
/ 21 сентября 2015

Просто вызовите базовый ActiveSupport::NumberHelper метод напрямую:

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

Это позволяет избежать ненужного включения всех методов ActionView в ваш объект.

3 голосов
/ 15 февраля 2016

Контроллеры Rails имеют доступ к тому же контексту, что и рендерер ActionView, используя свойство view_context без необходимости смешивать несколько вспомогательных модулей представления:

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

Это имеет преимущество в том, что имеет полный доступ ко всем представлениямпомощники, а также любая специальная конфигурация, которую вы можете настроить (например, настройки i18n).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...