хотя я понимаю, что вы должны использовать помощник внутри представления, мне нужен помощник в моем контроллере, так как я создаю объект JSON для возврата.
Это выглядит примерно так:
def xxxxx
@comments = Array.new
@c_comments.each do |comment|
@comments << {
:id => comment.id,
:content => html_format(comment.content)
}
end
render :json => @comments
end
как я могу получить доступ к своему html_format
помощнику?
ruby-on-rails
ruby-on-rails-3
ruby-on-rails-5
AnApprentice
источник
источник
Ответы:
Примечание: это было написано и принято в Rails 2 дня; в настоящее время ответ грубее - путь.
Вариант 1. Вероятно, самый простой способ - включить вспомогательный модуль в контроллер:
Вариант 2: Или вы можете объявить вспомогательный метод как функцию класса и использовать его следующим образом:
Если вы хотите использовать его как функцию экземпляра и функцию класса, вы можете объявить обе версии в вашем помощнике:
Надеюсь это поможет!
источник
html_format
- вам нужно толькоMyHelper.html_format
во второй.link_to
. Контроллеры не имеют доступа к этим методам, и большинство моих помощников используют эти методы. Кроме того, включение помощника в контроллер выставляет все методы помощника как общедоступные действия, что не очень хорошо.view_context
путь в Rails 3.Ты можешь использовать
helpers.<helper>
в Rails 5+ (илиActionController::Base.helpers.<helper>
)view_context.<helper>
( Rails 4 и 3 ) (ПРЕДУПРЕЖДЕНИЕ: это создает новый экземпляр представления за вызов)@template.<helper>
( Рельсы 2 )singleton.helper
include
помощник в контроллере (ВНИМАНИЕ: превратит все вспомогательные методы в действия контроллера)источник
view_context.helper_function
прост и прекрасно работает.ActionController::Base.helpers.helper_function
одинаково хорошview_context
= генийview_context
. Он будет создавать новый экземпляр представления для каждого вызова ...ActionController::Base.helpers.helper_function
не похоже на работу. Я получаюNoMethodError - undefined method spell_date_and_time' for #<ActionView::Base:0x007fede56102d0>:
при попытке вызватьActionController::Base.helpers.spell_date_and_time()
метод контроллера. Звонокview_context.spell_date_and_time()
работает, однако.helpers.helper_function
в своем контроллере ( github.com/rails/rails/pull/24866 )В Rails 5 используйте
helpers.helper_function
свой контроллер.Пример:
Источник: Из комментария @Markus на другой ответ. Я чувствовал, что его ответ заслуживает его собственного ответа, так как это самое чистое и простое решение.
Ссылка: https://github.com/rails/rails/pull/24866
источник
helper
в единственном числе, а в контроллере - во множественном числе.Моя проблема решена с помощью Варианта 1. Вероятно, самый простой способ - включить ваш вспомогательный модуль в ваш контроллер:
источник
В общем, если помощник должен использоваться в (просто) контроллерах, я предпочитаю объявлять его как метод экземпляра
class ApplicationController
.источник
В Rails 5+ вы можете просто использовать функцию, как показано ниже на простом примере:
источник
В Rails 5+ просто используйте помощников ( helpers.number_to_currency (10000) )
источник