2011-03-22 63 views
0

我正在使用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」中。

回答

0

helper_method幾乎與accounts_helper.rb中的定義方法幾乎相同(從技術上講,它是針對helper類的eval代碼)。爲了使用這個幫助器,你需要在一個幫助器模塊中定義它,並將其包含在要呈現顯示模板的控制器中。

實際的問題是,除非您明確要求包含它們,否則不同的控制器會對您的帳戶控制器助手一無所知。

例子:

module Users::AccountsHelper 
    code_here 
end 

class ApplicationHelper 
    helper Users::AccountsHelper 
end 

所有帳戶的輔助方法將是跨應用程序提供

+0

看到更新的答案 – Sigurd 2011-03-23 16:44:38