我正在使用Ruby on Rails 3,我试图设置一个helper_method
,它应该仅适用于控制器(例如:AccountsController)以及与之相关的所有视图,当它的视图在另一个视图中呈现时与该控制器无关的视图。我从Railcast "Restricting Access"获取灵感。
在我的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文件中,我有
<% if show_authorization %>
You are authorized!
<% else %>
You are NOT authorized!
<% end %>
如果我浏览网址http://<my_app_name>/users/accounts/1
,但是如果我以这种方式将show.html.erb
文件作为模板呈现在另一个视图文件中,则上述代码有效:
<%= render :template => "/users/accounts/show", :locals => { :account => @account } %>
我收到错误:
NameError in Users#show
undefined local variable or method `show_authorization' for #<#<Class:...>
为什么呢?如何在show_authorization
视图中使用AccountsController show.html.erb
方法在另一个与另一个控制器相关的视图中呈现时,如何解决这个问题呢?
PS :由于show_authorization
仅与AccountsController及其视图文件相关,我不想在'application_controller.rb'文件中插入相关代码,保留在'accounts_controller.rb'中。
答案 0 :(得分:0)
helper_method实际上与accounts_helper.rb中的定义方法几乎相同(从技术上讲,它是针对帮助程序类的eval代码)。为了使用这个帮助器,你需要在一个帮助器模块中定义它,并将它包含在控制器中,其中show template意味着要呈现。
实际问题是,在您明确要求包含它们之前,不同的控制器对您的帐户控制器帮助程序一无所知。
示例:
module Users::AccountsHelper
code_here
end
class ApplicationHelper
helper Users::AccountsHelper
end
所有帐户帮助程序方法都可以跨应用程序使用