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


当前回答

在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/

其他回答

class MyController < ApplicationController
    # include your helper
    include MyHelper
    # or Rails helper
    include ActionView::Helpers::NumberHelper

    def my_action
      price = number_to_currency(10000)
    end
end

在Rails 5+中,只需使用helper (helpers.number_to_currency(10000))

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

class UsersController < ApplicationController
  include UsersHelper
  
  # Your actions

end

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

注意:这是在Rails 2天内编写和接受的;如今,格罗斯的答案是正确的。

选项1:可能最简单的方法是在你的控制器中包含你的helper模块:

class MyController < ApplicationController
  include MyHelper
    
  def xxxx
    @comments = []
    Comment.find_each do |comment|
      @comments << {:id => comment.id, :html => html_format(comment.content)}
    end
  end
end

选项2:或者你可以将helper方法声明为类函数,并像这样使用它:

MyHelper.html_format(comment.content)

如果你想同时作为实例函数和类函数使用它,你可以在你的helper中声明这两个版本:

module MyHelper
  def self.html_format(str)
    process(str)
  end
    
  def html_format(str)
    MyHelper.html_format(str)
  end
end

我的问题用选项1解决了。可能最简单的方法是在控制器中包含你的helper模块:

class ApplicationController < ActionController::Base
  include ApplicationHelper

...

其他答案中缺少的一个选择是,你可以反过来:在你的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