无法使用’helper_method’和渲染模板
我正在使用Ruby on Rails 3,我正在尝试设置一个helper_method
,它应该仅适用于控制器(例如:AccountsController)以及与之相关的所有视图,当它的视图在与该控制器无关的另一个视图中呈现时也是如此。 我从Railcast“限制访问”中获取灵感。
在我的accounts_controller.rb文件中,我有
# Just to know, I am using a User namespace... class Users::AccountsController < ApplicationController helper_method :show_authorization def show_authorization false # This returning value is just an example end end
在我的views / users / accounts / show.html.erb文件中
You are authorized! You are NOT authorized!
如果我浏览URL http:///users/accounts/1
但是如果我以这种方式将show.html.erb
文件作为模板呈现在另一个视图文件中,则上述代码有效:
"/users/accounts/show", :locals => { :account => @account } %>
我收到错误:
NameError in Users#show undefined local variable or method `show_authorization' for #<#
为什么? 我如何解决这个问题,以便在另一个与另一个控制器相关的视图中呈现时,使show_authorization
方法可用于show.html.erb
视图?
PS :由于show_authorization
只与AccountsController及其视图文件相关,我不想在’application_controller.rb’文件中插入相关代码,而是将其保存在’accounts_controller.rb’中。
helper_method实际上与accounts_helper.rb中的定义方法几乎相同(从技术上讲,它是针对helper类的eval代码)。 要使用此帮助程序,您需要在辅助模块中定义它并将其包含在要显示模板的控制器中。
实际问题是,在您明确要求包含它们之前,不同的控制器对您的帐户控制器帮助程序一无所知。
例子:
module Users::AccountsHelper code_here end class ApplicationHelper helper Users::AccountsHelper end
所有帐户帮助程序方法将在整个应用程序中可用