문제

해당 변수가 둘 이상의 동작의 관점에서 필요하기 때문에 컨트롤러에 몇 가지 인스턴스 변수를 추가하고 싶습니다. 그러나 아래 예제는 내가 예상대로 작동하지 않습니다.

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"가 지적한대로 인스턴스 메소드 내부에 할당해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top