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