虽然我意识到你应该在视图中使用一个帮助器,但我需要在我的控制器中使用一个帮助器,因为我正在构建一个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助手?


当前回答

一般来说,如果helper只在控制器中使用,我更倾向于将它声明为类ApplicationController的实例方法。

其他回答

其他答案中缺少的一个选择是,你可以反过来:在你的Controller中定义你的方法,然后使用helper_method使它在视图中也可用,你知道,一个帮助方法。

例如:


class ApplicationController < ActionController::Base

private

  def something_count
    # All other controllers that inherit from ApplicationController will be able to call `something_count`
  end
  # All views will be able to call `something_count` as well
  helper_method :something_count 

end

在Rails 5中使用helper。控制器中的Helper_function。

例子:

def update
  # ...
  redirect_to root_url, notice: "Updated #{helpers.pluralize(count, 'record')}"
end

来源:来自@Markus关于不同答案的评论。我觉得他的答案应该有自己的答案,因为这是最干净、最简单的解决方案。

参考:https://github.com/rails/rails/pull/24866

在Rails 5+中,您可以简单地使用下面演示的简单示例函数:

module ApplicationHelper
  # format datetime in the format #2018-12-01 12:12 PM
  def datetime_format(datetime = nil)
    if datetime
      datetime.strftime('%Y-%m-%d %H:%M %p')
    else
      'NA'
    end
  end
end

class ExamplesController < ApplicationController
  def index
    current_datetime = helpers.datetime_format DateTime.now
    raise current_datetime.inspect
  end
end

输出 “2018-12-10 01:01 am”

在rails 6中,只需将这个添加到你的控制器:

class UsersController < ApplicationController
  include UsersHelper
  
  # Your actions

end

现在是user_helpers。Rb将在控制器中可用。

在Rails 5之前,必须包含helper模块。

在更新的版本中,你可以在你的控制器中使用帮手(复数)对象。

  class UsersController
    def index
      helpers.my_helper_method_name(even_pass_arg_here)
    end
  end

https://www.rubyguides.com/2020/01/rails-helpers/