Rails – 如何在控制器中使用助手

虽然我意识到你应该在视图中使用助手,我需要一个助手在我的控制器,因为我build立一个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 2天内写入并接受的; 现在grosser的答案(下面)是要走的路。

选项1:可能最简单的方法是将您的帮助模块包含在您的控制器中:

 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:或者您可以将辅助方法声明为类函数,并像这样使用它:

 MyHelper.html_format(comment.content) 

如果您希望能够将其用作实例函数和类函数,则可以在助手中声明这两个版本:

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

希望这可以帮助!

您可以使用

  • @模板。 (导轨2)
  • view_context。 (导轨3)(警告:这实例化每个调用一个新的视图实例)
  • ActionController的:: Base.helpers
  • 包括帮助单身类,然后singleton.helper
  • 在控制器中包含帮助器(警告:将所有的帮助器方法变成控制器动作)

在Rails 5中,使用控制器中的helpers.helper_function

例:

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

来源:来自@Markus对不同答案的评论。 我觉得他的答案应该是自己的答案,因为这是最简单和最简单的解决scheme。

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

使用选项1解决了我的问题。最简单的方法是将您的帮助模块包含在控制器中:

 class ApplicationController < ActionController::Base include ApplicationHelper ... 

一般来说,如果帮助程序要在(只)控制器中使用,我更愿意将其声明为class ApplicationController的实例方法。