2011-03-22 6 views
0

Ruby on Rails 3을 사용하고 있는데 컨트롤러 (예 : AccountsController)에서만 작동해야하는 helper_method을 설정하려고합니다. 해당 컨트롤러와 관련이없는 다른보기에서 렌더링됩니다. 나는 Railcast "Restricting Access"에서 영감을 얻었습니다. 내 accounts_controller.rb 파일에서'helper_method'을 사용하는 데 문제가 있고 템플릿을 렌더링하는 데 어려움이 있습니다.

나는 나가를 검색하면 위의 코드가 작동 내가

<% if show_authorization %> 
    You are authorized! 
<% else %> 
    You are NOT authorized! 
<% end %> 

을 내보기/사용자/계정/show.html.erb 파일에서

# 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 

이 URL http://<my_app_name>/users/accounts/1하지만 난 다른보기 파일의 템플릿으로 식으로 show.html.erb 파일을 렌더링하는 경우 :

<%= render :template => "https://stackoverflow.com/users/accounts/show", :locals => { :account => @account } %> 
,536을

NameError in Users#show 
undefined local variable or method `show_authorization' for #<#<Class:...> 

이유 :

나는 오류가? AccountsController show_authorization 메서드를 show.html.erb 뷰에서 다른 컨트롤러와 관련된 다른 뷰에서 렌더링 할 수 있도록하려면 어떻게 해결할 수 있습니까?

P. : show_authorization은 AccountsController 및 뷰 파일에만 관련되어 있으므로 관련 코드를 'application_controller.rb'파일에 삽입하지 않고 'accounts_controller.rb'파일에 그대로 두는 것이 좋습니다.

답변

0

helper_method는 accounts_helper.rb (실제로는 헬퍼 클래스에 대한 평가 코드)의 정의 방법과 거의 동일합니다. 이 도우미를 사용하려면 도우미 모듈에서이 도우미를 정의하고 show template이 렌더링되어야하는 컨트롤러에이 도우미를 포함시켜야합니다.

실제로 문제는 다른 컨트롤러가 명시 적으로 포함해야 할 때까지 계정 컨트롤러 도우미에 대해 알지 못한다는 것입니다.

예 :

module Users::AccountsHelper 
    code_here 
end 

class ApplicationHelper 
    helper Users::AccountsHelper 
end 

모든 계정 도우미 메서드는 응용 프로그램에서 사용할 수

+0

업데이트 된 대답을 참조 – Sigurd

관련 문제