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
的实例方法。