我正在使用Ruby on Rails 3,我试图设置一个helper_method
,它应该只适用于控制器(例如:AccountsController)以及与之相关的所有视图,当它的视图在与该控制器无关的其他视图中呈现。我从Railcast "Restricting Access"获取灵感。使用'helper_method'和呈现模板的问题
在我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
在我的意见/用户/帐户/ show.html.erb文件我有
<% if show_authorization %>
You are authorized!
<% else %>
You are NOT authorized!
<% end %>
上面的代码工作,如果我浏览URL http://<my_app_name>/users/accounts/1
但如果我以这种方式将show.html.erb
文件作为另一个视图文件中的模板:
<%= render :template => "https://stackoverflow.com/users/accounts/show", :locals => { :account => @account } %>
我得到的错误:
NameError in Users#show
undefined local variable or method `show_authorization' for #<#<Class:...>
为什么?我怎样才能解决这个问题,以便在另一个与另一个控制器相关的视图中呈现AccountsController show_authorization
方法时可用于show.html.erb
视图?
P.S.:因为show_authorization
仅与AccountsController及其视图文件相关,所以我不想在“application_controller.rb”文件中插入相关代码,但将其保留在“accounts_controller.rb”中。
看到更新的答案 – Sigurd 2011-03-23 16:44:38