2009-09-21 6 views
0

간단한 질문 - 객체의 인스턴스를 만드는 양식이 있습니다. 그 객체 (일명 양식 제출)를 작성한 후에는 다른 컨트롤러의 조치와 ​​연관된 새 양식으로 리디렉션하고 해당 양식 변수의 일부를 채우기 위해 해당 인스턴스 변수를 가지고 싶습니다.한 폼의 인스턴스 변수를 다른 컨트롤러의 Rails 액션으로 넘김

필자는 일반적으로 2 가지 옵션을 알고 세션에 해당 인스턴스 변수를 저장하거나 params를 통해 전달합니다. 나는 세션을 사용할 수 없다. (나는 당신을 지루하게하지 않을 다양한 이유 때문에). 내가 혼란스러워하는 params 옵션.

나는 이것을 알아야한다. :(당신이이 일에 대해 갈 것이라고 어떻게? 어떤 사례가 크게 당신은 당신의 컨트롤러에 두 가지 방법이있을 것이다. (관련 템플릿 렌더링) 각 양식에 대한 하나 베시

답변

1

!

을 평가. 첫 번째 형태 두 번째 조치에 게시해야한다. 두 번째 작업은 다음 두 번째 템플릿 내에서 사용할 수, 인스턴스 변수에 요청 매개 변수를 전송할 수 있습니다.

class FooController 
    def bar 
    # setup instance variables and render first form 
    end 

    def baz 
    @bar_values = params[:bar] 
    # setup other instance variables and render second form 
    end 
end 

UPDATE0이 세션을 사용하여 두 개의 컨트롤러를 통해이 작업을 수행합니다.

class FooController 
    def new_baz 
    # setup instance variables and render the first form 
    end 

    def create_baz 
    # respond to posting of form data 
    session[:current_baz_values] = params 
    redirect_to :action => "baq", :controller => "bar" 
    end 
end 

class BarController 
    def baq 
    @baz_values = session[:current_baz_values] 
    # setup other instance variables and render the second form 
    end 
end 
+0

이것은 도움이됩니다. 그러나 액션 (또는이 경우 두 번째 양식)이 완전히 다른 컨트롤러에서 호출되는 경우 어떻게됩니까? 그래서 제 경우에는 "bar"라는 액션이 ​​폼이있는 show 액션을 호출합니다. 해당 양식이 제출되면 "작성"조치가 호출되고 "막대"의 인스턴스가 작성됩니다. 생성이 끝나면 new_elephant_path를 redirect_to 할 필요가 있지만 @bar의 인스턴스를 가지고 있습니다. 나는 이것이 정말로 나쁜 디자인처럼 들린다는 것을 안다. 그러나 내가 이것을 고심함에 따라 나는 이것을위한 해결책에 대해 아직도 궁금하다. – Betsy

+0

리디렉션을 사용하려는 경우 요청간에 지속될 매개 변수를 저장해야합니다. 세션 해시 또는 데이터베이스 테이블을 사용하십시오. –

0

어떻게 든 새로 만든 레코드를 다른 컨트롤러에서 찾은 다음 필요한 정보를 채우기 위해 사용할 수 있습니까?

또한 AJAX를 사용하지 않는 한 일반적으로 레코드의 표시 페이지에서 수정 작업을하고 싶지 않습니다. 그것들은 편집 또는 업데이트 페이지에 속합니다. 사람들이 항상 동일한 페이지에서 레코드를 편집 할 수있게하려면 표시 페이지에서 AJAX를 사용하거나 항상 편집/업데이트 페이지를 반환하십시오.

0

세션을 사용하는 경우 flash 변수를 사용하여 매개 변수를 저장할 수 있습니다. 다음과 같이 flash [: my_params] = params와 params = flash [: my_params]를 사용하여 다음 요청에서 다시 읽습니다. 플래시에 대한 좋은 점은 다음 요청 만 지속되고 그 후에는 자동으로 지워진다는 점입니다.

Ajax를 사용할 때 클라이언트 측에서 값을 전달하려는 경우 매개 변수로 숨겨진 필드를 설정하면 다음 요청으로 전달됩니다.

관련 문제