2009-11-11 3 views
0

제출할 때 고객이 데이터를 살펴보고 데이터를 저장하기 전에 변경 사항을 확인하는 양식이 있습니다.수동 백 리디렉션에서 양식 데이터를 유지하는 더 나은 방법은 무엇입니까?

그러나 사용자가 뒤로 이동하여 제출하기 전에 데이터를 살펴보기 위해 데이터를 유지하는 방법은 매우 거친 방법입니다. 현재의 데이터베이스 필드가 아닌 필드에 대한 사용자의 업데이트를 원한다면이 "돌아 가기"액션에 표시되는 내용으로 게시/가져 오기 매개 변수를 통해 값을 전달해야합니다. 그래서 제 컨트롤러는 다음과 같습니다 :

@customer = Customer.find session[:id] 
    unless params[:customer].nil? 
     @customer.attributes = params[:customer] 
    end 

더 좋은 방법이 있습니까? 나는 실제로 이와 같은 정보를 전달하기위한 세션을 금기 사항이라고 생각하기 때문에 일반적으로 받아 들여지는 Rails 세션 사용법이 무엇인지 궁금하다. 예 아니오? 생각? 감사.

답변

0

세션과 관련된 더 좋은 방법이있을 수 있습니다. 차라리 두 번째 형식과 많은 자바 스크립트를 사용하여 세션 해시를 완전히 사용하지 않는 것이 좋습니다.

다음은 어떻게 처리할까요? 첫 번째 양식은 전혀 변경되지 않으며 리뷰라는 새로운 작업에 제출하십시오.

검토 작업은 검토를 위해 변경 사항을 표시하고 편집 링크와 확인 버튼을 표시합니다. 또한 이전 페이지의 양식을 검토 작업에 다시 제출할 숨겨진 요소로 다시 작성합니다.

확인 버튼이 업데이트 작업에 제출됩니다.

편집 링크를 클릭하면 검토 영역이 숨겨지고 이전 페이지에서 중복 된 것으로 표시됩니다. 여기

는 점 아래로 망치 몇 가지 예제 코드입니다 :

응용 프로그램/컨트롤러/example_controller.rb을

class ExampleController < ApplicationController 

    def edit 
    @example = Example.find(params[:id]) 
    end 

    def review 
    @example = Example.find(params[:id]) 
    @example.update_attributes(params[:example]) 
    @example.valid? 
    end 

    def update 
    @example = Example.find(params[:id]) 
    @example.update_attributes(params[:example]) 
    if @example.save 
     redirect_to @example 
    else 
     render :action => :review 
    end 
    end 
end 

응용 프로그램/뷰/예/_form.html.erb :

<% form_form @example, :url => {:action => "review"} do |f|%> 
    ... 
    Form inputs go here 
    ... 
<% end %> 

app/views/examples/edit.html.erb :

<%= render :parital => form %> 

응용 프로그램/뷰/예/review.html.erb :

<div id="review"> 
    ... 
    content for review goes here 
    ... 
    <%= link_to_function "Edit", "$('review').hide(); $('edit').show()" 
    <% form_for @example do |f| %> 
    <%= hidden_field :attribute, @example.attribute %> 
    ... 
     hidden_field for each attribute 
    ... 
    <%= submit_tag "Accept These Changes" %> 
    <% end %> 
</div> 
<div id="edit" style="display:none"> 
    <%= render :partial => 'form' %> 
</div> 
+0

그래서 당신의 쇼 숨겨진 요소를 사용하는 것입니다 아약스/자바 스크립트 또는이 전체 페이지 리디렉션입니까? – Lukas

+0

나는 내가 자바 스크립트 일 뿐이라는 점에서 분명하다고 생각했지만, 그렇다고 생각하지 않는다. 내 답변에 예제를 추가했습니다. – EmFi

+0

review.erb 만 빼고 "편집"div를 먼저 표시 한 다음 "제출"을 누르면 리뷰 폼을 숨기고 표시합니다. 그것은 단지 관찰이다. 자바 스크립트를 사용하지 않으면이 작업을 수행하는 방법이 더 궁금합니다. JS를 사용하는 경우에도 JS 호환이 불가능할 수 있기를 원합니다. 동의하는 동안 이것은 쉬운 방법입니다. 나는 이렇게 할 수 있는지 확신 할 수 없습니다. – Lukas

관련 문제