0

ajax 및 html 요청에 응답하는 컨트롤러 중 하나에서 만들기 작업이 있습니다. create 액션에서 find_or_initialize_by_such_and_such를 사용하여 인스턴스 변수 (@location)를 설정했습니다. 나는 그 위치가 이미 존재하거나 사용하지 않을 있는지 확인하기 위해 테스트 : 이것은 기본적으로 부분 (create.js.erb) 이후 잘 작동 목록에 새로 저장된 위치에 객체를 추가레일스가 응답하지 않습니다?

if @location.id.nil? 
    @location.save 
    respond_with(@location, :location => root_path) do |format| 
    format.html { redirect_to root_path } 
    end 
end 

.

사용자가 이미 존재하는 위치 (즉, ID가있는 위치)를 입력하면 문제가 발생합니다. 그런 경우에는 발견 된 위치가 목록에 추가되는 것을 원하지 않습니다. 중복을 유발할 수 있습니다 (모든 위치는 이미 있음). 그 시나리오에서 @location.id.nil?이 거짓이므로 위의 블록 내의 코드는 분명히 실행되지 않지만 그 상황을 처리하는 방법을 찾는 데 어려움을 겪고 있습니다. 내가 좋아하는 일을 시도 :

respond_with(nil, :location => root_path) do |format| 
    format.html { redirect_to root_path } 
end 

하지만 js.erb 파일은 여전히 ​​@location 인스턴스 변수를 잡고 목록에 객체를 추가 자바 스크립트를 실행합니다.

따라서이 문제를 해결하는 가장 좋은 방법은 무엇일까? find_or_initialize_by가 이미 생성 된 개체를 반환하는 경우 응답은이 개체를 목록에 추가하기 위해 javascript를 실행하지 않습니다.

답변

1

respond_with(nil, :location => root_path) do |format| 
    format.html { redirect_to root_path } 
end 

를 제거하고 여분의 응답을 내가 다시 처리해야 인상이었다 아주 멋진

+0

아하지 않는 경우에만이

redirect_to root_path 

를 남겨 respond_with 블록을 사용하지만 완벽하게 작동합니다. 비록 이것이 작동하도록하기 위해 추가하기 만하면 respond_with 블록 뒤에 'return'을 추가해야했습니다. @ location.id.nil? 조건을 만족시키지 않으면 실행이 동작의 끝까지 계속됩니다 –

관련 문제