여러 컨트롤러에 대해 필터를 사용하기 전에 클래스를 사용하려고합니다. 필터는 컨트롤러가 호출하는 컨트롤러에 따라 약간 다른 작업을 수행해야하기 때문에 필터를 전달하기 위해 컨트롤러를 가져 오기 위해 클래스를 필터로 사용해야하는 것처럼 보입니다. 에 before_filter 기사에 행동과 이미지 컨트롤러를 보여필터 클래스에서 플래시 및 redirect_to에 액세스하는 방법
지금까지, 나는이이 클래스를 호출 할 것이다
class ShowFilter
def self.filter(controller)
c_name = controller.controller_name
object_id = controller.params[:id]
case c_name
when "articles"
article = Article.find(object_id)
unless curr_user.can_see?(article)
controller.redirect_to(:controller => "articles", :action => "index")
end
when "images"
image = Image.find(object_id)
unless curr_user.can_see?(image)
controller.redirect_to(:controller => "images", :action => "index")
end
end
end
같은 것을 가지고있다.
내 문제는 'redirect_to'가 필터에 전달 된 모든 컨트롤러의 보호 된 메서드라는 오류가 발생한다는 것입니다.
내가
redirect_to(:controller => "images", :action => "index")
대신
controller.redirect_to(:controller => "images", :action => "index")
내가 얻을 호출하면 "ShowFilter에 대한 정의되지 않은 메서드 'redirect_to를'클래스 '오류가 발생했습니다.
내가
class ShowFilter < ApplicationController
나의 클래스를 정의하면 난 아직 정의되지 않은 방법의 오류가 발생합니다. 플래시에도 액세스하는 것과 똑같은 문제를 겪고 있습니다.
필터 클래스 내부를 리디렉션 할 수있는 방법이 있습니까? 플래시를 리디렉션하고 액세스 할 수 있도록 필터링하기 위해 다른 방법을 사용해야합니까?
감사합니다. Tanel. controller.send의 작동 방식에 관한 좋은 링크가 있습니까? 나는 여전히 플래시를 설정하려고하고 있는데, 나는 그것을 알아낼 수 없다. –
Lookup Object # 루비 문서를 보냅니다. 레일 특유의 것이 아닙니다. – Senjai