2010-06-05 4 views
24

이것은 매우 간단한 레일 질문입니다. 다음과 같은 변수가 있습니다.레일스 모든 컨트롤러 액션에서 가변적입니다.

@administration = Administration.first 

내가 예를 들어 나는 제품 컨트롤러가있는 경우, 그래서이 변수 내 모든 컨트롤러에 걸쳐 모든 컨트롤러 액션을 통해 액세스하려면, 내가 일반적인 CRUD 작업이 그 안에 정의 된대로, 나는 @administration 변수를 원하는 위의 모든 CRUD 작업에 넣습니다. (파괴 나 생성 또는 업데이트에는 필요하지 않습니다). 나는 내 프로젝트 전반에 걸쳐 많은 컨트롤러가 나는 그것을 원하는 모든 작업을 수동으로 추가하는 것보다 더 쉬운 방법이 있는지 궁금 해서요.

내가 전역 변수를 시도

$administration = Administration.first 

하지만 Administration.first 테이블의 실제 내용을 업데이트 할 때 업데이트되지 않는 문제가 발생합니다. 또한 전역 변수를 피하고 싶습니다.

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

답변

65

액션이 호출되기 전에 관리 변수를 설정하는 before_filter를 ApplicationController에 추가 할 수 있으며 필요한 액션으로 만 제한 할 수 있습니다.

class ApplicationController < ActionController::Base 
... 
before_filter :set_admin 
def set_admin 
    @administration = Administration.first 
end 
.. 

http://api.rubyonrails.org/v2.3.8/classes/ActionController/Filters/ClassMethods.html

+0

최고, 감사합니다. – AustinT

+0

작업간에 공유하려면 @instance 변수 여야합니까? – Qasim

15

그냥 확장 크리스토스 포스트 ...

당신이 @administration이 파괴 만들고 업데이트 컨트롤러 작업 후 추가 액세스 할 수 싶지 않은 경우

: 조치 : => 제외 다음과 같이 before_filter합니다 :

before_filter :set_admin, :except => [:create, :update, :destroy]

레일 4

5를가되지 않는 것 before_filter. 대신이를 사용할 수 있습니다

before_action : set_admin을 제외하고 : [: 작성 : 업데이트 : 파괴] 돕는

관련 문제