2014-11-01 2 views
0

AJAX를 통해 제출하는 양식이 있으므로 서버의 예상 응답 형식은 javascript입니다. 문제는 이와 같은 유효성 검사 작업을 할 수 없다는 것입니다.AJAX 제출 후 양식을 확인하는 방법은 무엇입니까?

# POST /cats 
    # POST /cats.json 
    def create 
    @cat = Cat.new(cat_params) 

    respond_to do |format| 
     if @cat.save 
     format.html { redirect_to @cat, notice: 'Cat was successfully created.' } 
     format.json { render action: 'show', status: :created, location: @cat } 
     else 
     format.html { render action: 'new' } 
     format.json { render json: @cat.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

을하지만 지금이 같은 상황이 : 보통 난 그냥 이런 식으로 할 것

# POST /cats 
    # POST /cats.json 
    def create 
    @cat = Cat.new(cat_params) 

    respond_to do |format| 
     if @cat.save 
     format.js { } 
     else 
     format.js { ????? } 
     end 
    end 
    end 

내가 create.js.erb 제작 한 어떤 않는 새로운 객체가 저장되어있는 경우 나에게 필요한 것을 다하지만, 개체가 저장되지 않은 경우 확인 표시를 처리하는 방법을 모르겠습니다. 내 양식 안에 AJAX를 사용하지 않으면 작동하는이 있습니다.

어떻게해야합니까? 나는 레일즈 4를 사용하고있다.

답변

4

당신의 create.js.erb 다시 unless @cat.persisted? 양식을 렌더링 할 수 있습니다.

  1. 양식을 '_form.html.erb'와 같이 다른 부분으로 가져옵니다.

  2. 양식에 ID가 "my_form_div"와 사업부 내에있는 경우

    ,

다음 create.js.erb

<% if @cat.persisted? %> 
    # code for success save 
<% else %> 
    $('#my_form_div').html('<%= escape_javascript(render('form')) %>'); 
<% end %> 

이 오류와 함께 다시 전체 양식을 렌더링 할 것이다. 전체 양식을 다시 렌더링하지 않으려면 오류 div에 대해서만 동일한 작업을 수행 할 수 있습니다.

+0

고마워! 그것은 작동합니다! – Bosquets

2

성공과 실패 모두에서 create.js.erb를 렌더링 할 수 있으며 create.js.erb 파일에서 @ cat.errors.any? 만약 그렇다면 당신은 일부 jquery를 작성하고 이전과 같이 성공 시나리오로 처리하지 않으면 HTML에 오류를 삽입 할 수 있습니다.

샘플 코드는 내가 예를 무슨 뜻인지 설명하기 :

def create 
    @cat = Cat.new(cat_params) 

    respond_to do |format| 
    @error = @cat.save 
    // or you can use if if you need more in success case to be done before rendering 
    format.js {} 
    end 
end 

당신의 create.js.erb에 ::에

<% if @error %> 
    // loop over errors like your working code in the case of html request 
<% else %> 
    // success scenario 
<% end %> 
+0

감사! html로 오류를 삽입하는 방법에 대한 간단한 힌트를 알려주시겠습니까? – Bosquets

+1

좋아, jQuery 사용법을 알고 있습니까? - 가장 간단한 방법은 위의 코드를 취하는 것입니다. 마지막 블록 - 실패 사례 - 부분 파일의 질문에 $ ("# id_of_error_div")를 쓰십시오 .html ('<% = j render "your_partial_form"% > ') –

관련 문제