2012-03-16 2 views
1

레일즈 애플리케이션에서 AJAX를 통합하려는 경우, 새 클릭하면 모달 창과 폼이 열립니다. 유효성 검사 오류가 표시되면 작성 작업에서 오류가 발생하여 new.js.erb 파일을 다시 렌더링해야한다고 생각합니다. 이것이 올바른 접근 방법입니까? 같은 브라우저에서레일즈 : 컨트롤러를 사용하여 js.erb 템플릿 렌더링

def create 
    @place = Place.new(params[:place]) 
    if @place.save 
     redirect_to places_path, :notice => "Successfully created place" 
    else 
     render "new.js.erb" 
    end 
end 

내가 얻을 결과는 JS 이스케이프 텍스트 :

$("#new_grouping").html("<div class=\"modal-header\">\n <a class=\"close\" data- dismiss=\"modal\">×<\/a>\n <h3>Create a new menu section<\/h3>\n<\/div>\n<form accept-charset=\"UTF-8\" action=\"/places/1-mama-s-pizza/groupings\" class=\"simple_form new_grouping\" id=\"new_grouping\" method=\"post\" novalidate=\"novalidate\"> 

나는 렌더링 블록하지만 행운에 다양한 옵션을 넣어 시도했습니다. 어떤 팁?

답변

14

어떤 이유로 든 사용자가 자바 스크립트를 끈 경우 AJAX 및 비 AJAX 호출을 모두 지원하는 것이 가장 좋습니다.

def create 
    @place = Place.new(params[:place]) 

    respond_to do |format| 
    if @place.save 
     format.html { redirect_to places_path, :notice => "Successfully created place" } 
     format.js # renders create.js.erb, which could be used to redirect via javascript 
    else 
     format.html { render :action => 'new' } 
     format.js { render :action => 'new' } 
    end 
    end 
end 

render :action => 'new'

실제로 비 AJAX 또는 AJAX 호출인지 new.js.erb 따라 각각 new.html.erb을 초래 컨트롤러 액션 new의 템플릿을 렌더링한다. new.js.erb에서

이 ERB 간다/자바 스크립트 코드 : 다음 응답 콘텐츠 형식없이 할 수 있고 일부 브라우저는 이것을 이해 할 수 없기 때문에

$("#new_grouping").html("<%= escape_javascript(...) %>"> 
+0

좋습니다. 나는 둘 다 확실히 지원할 것이다. 그러나 그것은 나에게 생각이 떠올랐다. 내가 원하는 것을 성취 할 수있는 방법이 없다. POST CREATE 액션이 실패하면 내 화면에 렌더링 된 자바 스크립트로 응답한다. 그것은 리다이렉션이거나 전체 페이지를 다시 렌더링해야합니다. 그 말은 공정한가요? – chourobin

+0

그래, 아니. 그것은 당신이 당신의'new.js.erb'를 쓰는 방법과 실제로 거기에서 무엇을하는지에 달려 있습니다. 페이지의 특정 요소에만 오류 특정 HTML을 삽입하고 전체를 다시 렌더링하지 않을 수 있습니다. 그러나 제 경험상 당신은 많은 것을 명심해야합니다. 따라서 실제로 AJAX로 전체 POST CREATE 작업을 수행하지 않는 것이 좋습니다 – Vapire

0

내가 아는 한, 컨트롤러 부분 렌더링은 나쁜 생각 . 이 행동에 부착 된 일부 파일의 경우는

render :action => "create" 

를 작성해야하거나 필요하면 그냥 내가 말했듯이

<%= render :partial => "path/to/partial" %> 

쓰기 액션 파일에서 다음 부분 그을음 렌더링, 당신은 필요가 없습니다 응답의 콘텐츠 유형 문제

+0

그냥 콘텐츠 형식을 설정할 수 없습니까? – Magne

관련 문제