2012-03-10 5 views
0

인덱스 메소드를 수정해야하는 표준 books_controller가 있다고 가정합니다. params [: value]가 nil이면 not_nil 값을 할당 한 다음 동일한 페이지를 다시로드해야합니다. [: 값] 다시 전무하다 내가 인덱스 방법 내에서 할 것은레일에서 같은 컨트롤러 메소드로 리디렉션

redirect = params[:value].nil? 
params[:value] ||= some_value_which_is_not_nil 
redirect_to books_path if redirect 

문제는 PARAMS 리디렉션 후하는 것이입니다! params 변수를 redirect_to 메서드에 전달하려면 어떻게해야합니까? 아니면이 값을 저장하는 다른 방법이 있습니까?

+0

동일한 페이지로 리디렉션하지 않아도됩니다. 컨트롤러 동작은 페이지가 실제로 렌더링되기 전에 완료되므로 첫 번째 요청으로 변수를 설정하면 충분합니다. –

답변

0

params 해시가 작동하지 않습니다. HTTP는 상태 비 저장 - 요청은 여러 요청간에 지속되지 않습니다.

의미는 요청이 발생할 때마다 요청의 GET/POST 매개 변수에서 params 해시가 채워짐을 의미합니다. 동일한 페이지로 리디렉션하고 해당 매개 변수가 지속되도록하려면 GET 매개 변수로 전달해야합니다.

redirect_to books_path(:value => some_value_which_is_not_nil) if redirect 
+0

그래서 해결책은 무엇입니까? 인스턴스 변수? – Sergey

+0

아니요, 여러 가지 요청에서 지속되는 데이터는 쿠키 또는 일부 서버 측 백업 저장소를 통해 수행됩니다. 이 경우 값을 매개 변수로 요청에 간단히 추가 할 수 있습니다. 그러나 앞으로는 전체 객체를 요청에서 요청으로 전달하려고합니다. 이것은 지저분해진다. 암호화되지 않은 쿠키 (4KB 제한)에 객체를 저장하거나 사용자 세션을 데이터베이스, memcache 또는 다른 백업 저장소에 묶을 수 있습니다. – kwarrick

+0

더 명확히 말하자면, 애플리케이션에 대한 두 개의 순차적 요청이 애플리케이션의 두 개의 완전히 독립적 인 실행 인스턴스에 의해 처리 될 수 있다는 점을 고려하십시오. – kwarrick

0

나는 이것이 당신이 찾고있는 그러나 당신이 path 방법으로 매개 변수를 전달할 수있는 경우 정확히 모르겠어요.

books_path(:value => 1)의 결과는 /books?value=1입니다.

0
def index 
## RELOAD same page if params value is nil 
params[:value] || redirect_to books_path(:value => "some_value_which_is_not_nil") 
# Do my own processing! 
end 
0

당신은 당신이 왜 그냥 당신이 다시로드하지 않고 설정 한 값으로 처리를 계속 ... 다시로드거야 동일한 작업에 있어야 뭔가에 전무 값을 설정하는 경우?

작업을 새로 고침해야한다는 것을 알 수 없습니다.

관련 문제