2012-07-13 4 views
0

application_controller.rb 컨트롤러에서 상속 한 모든 컨트롤러에 액세스 할 수있는 변수를 선언하고 싶습니다. 가능하다면 뷰에 특별히 전달되지 않은 한 뷰를 포함하여 다른 곳에서는 자식 클래스에서만 변수에 액세스 할 수 있습니다.레일즈 컨트롤러와 상속을 포함한 "보호 된"변수

저는 Ruby와 Rails에 익숙하지 않으며 변수에 "보호 된"범위가 존재하는지 확신 할 수 없지만 기능에 대한 것을 보았습니다. 나는 간단한 대답을 찾을 수 없었고, 변수를 선언하는 다양한 방법과 액세스 할 수있는 곳으로 앱에서 조금 실험 해왔다. 그것은 내가 이것을 성취 할 수있는 방법에 대한 정보를 전혀주지 못했습니다.

도움을 주시면 감사하겠습니다.

코드 :

class ApplicationController < ActionController::Base 
    protect_from_forgery 
    @admin_name = "AdminUserName" 
    @admin_password = "AdminPassword" 
end 

class ProjectsController < ApplicationController 
    http_basic_authenticate_with :name => @admin_name, :password => @admin_password, :except => [:index, :show] 

    # controller functions here 
end 

이 나를 위해 작동하지 않는 것 같습니다.

답변

1

당신이 알고 있듯이, 루비의 변수에는 보호 된 범위와 같은 것이 존재하지 않습니다. 레일스에서 ​​instance variable을 사용하여 뷰에 액세스 할 수있는 컨트롤러에서 변수를 설정할 수 있습니다. 그것은 오래된 레일 기능이 you can use instance variables set in the controller in the views입니다.

인스턴스 변수는 인스턴스를

class A 
    def make_ivar 
    @foo = 'bar' 
    end 
end 

class B < A 
    def get_ivar 
    @foo 
    end 
end 

b = B.new 
b.make_ivar 
b.get_ivar #=> @foo 

에 예로부터 상속 그러나 모든 부분 지문 may not be good practice를 통해 뷰 인스턴스 변수를 전달하여 is breaking encapsulation 레일 있음을 인식하고 사용 할 수 얻을. replace instance variables with local variables as soon as they land in the views

UPDATE 귀하의 경우에는

을, 무엇보다도, constants를 사용합니다. 상수가 정의되어 있고 상속받을 클래스의 범위에 있지만, 범위

난 당신이보기에 그들에게 전화하고 싶지 않은 추측
class ApplicationController < ActionController::Base 
    protect_from_forgery 
    ADMIN_NAME = "AdminUserName" 
    ADMIN_PW = "AdminPassword" 
end 

class ProjectsController < ApplicationController 
    http_basic_authenticate_with :name => ADMIN_NAME, :password => ADMIN_PW, :except => [:index, :show] 

    # controller functions here 
end 

호출하지 않는 한 그들은 뷰에 사용할 수 없습니다. 정말로 이것을하고 싶다면 다음과 같이 할 수 있습니다 :

ApplicationController::ADMIN_NAME 
+0

상속 부분'class B

+0

@CasualCoder 감사합니다! –

+0

그래서, 그것은 나를 위해 일하지 않는 것 같습니다. 내 질문을 내 실제 코드로 업데이트하여 잠시 후에 내가하려는 일을 정확하게 보여줄 것입니다. – KayoticSully

관련 문제