내 컨트롤러 인스턴스 변수가보기에서 작동하지 않는 이유 (레일)
-
06-07-2019 - |
문제
해당 변수가 둘 이상의 동작의 관점에서 필요하기 때문에 컨트롤러에 몇 가지 인스턴스 변수를 추가하고 싶습니다. 그러나 아래 예제는 내가 예상대로 작동하지 않습니다.
class ExampleController < ApplicationController
@var1 = "Cheese"
@var2 = "Tomato"
def show_pizza_topping
# What I want is the above instance vars from within the view here
end
def show_sandwich_filling
# What I want is the above instance vars from within the view here
end
end
내가 이해 한대로 Rails는 컨트롤러에서 인스턴스 변수를 가져 와서보기에서 사용할 수있게합니다. 액션 방법에 동일한 변수를 할당하면 잘 작동하지만 두 번 수행하고 싶지는 않습니다. 내 방식이 작동하지 않는 이유는 무엇입니까?
(참고 : 이것은 약간의 쓰레기 예이지만 이해가되기를 바랍니다)
편집 :이 질문에 대한 답을 여기에서 찾았습니다. 루비 인스턴스 변수는 언제 설정됩니까?
편집 2 : prever_filter 및 초기화 메소드와 같은 필터를 사용하기 가장 좋은시기는 언제입니까?
해결책
이러한 유형의 물건은 a에서 처리해야합니다 before_filter
. 이름에서 알 수 있듯이 이전 필터는 조치 전에 호출되는 메소드 또는 선언하는 방법입니다. An example:
class ExampleController < ApplicationController
before_filter :set_toppings
def show_pizza_topping
# What I want is the above instance vars from within the view here
end
def show_sandwich_filling
# What I want is the above instance vars from within the view here
end
protected
def set_toppings
@var1 = "Cheese"
@var2 = "Tomato"
end
end
또는, 당신은 당신의 prever_filter가 당신의 행동 중 하나에만 작동하도록 할 수 있습니다.
before_filter :set_toppings, :only => [ :show_pizza_topping ]
도움이 되었기를 바랍니다.
편집 : 다음은 다음과 같습니다 ActionController의 필터.
다른 팁
그것들은 인스턴스 변수가 아닙니다.
class A
@x = 5
def f
puts @x
end
end
A.new.f
=> nil
인스턴스 수준이 아닌 클래스 수준에서 정의하고 있습니다. "TheIV"가 지적한대로 인스턴스 메소드 내부에 할당해야합니다.
제휴하지 않습니다 StackOverflow