DELETE 메서드
4695 단어 railsjavascriptruby
나는 그 당시 엉망이었고, 거의 같은 혼란에 빠졌지만 마침내 내 문제가 무엇인지 알아 냈습니다!
문제
수정 사항
백엔드
내 레일 API의 백엔드부터 시작하겠습니다. 내 파괴 방법과 경로가 제대로 설정되지 않았습니다. 모든 양조장을 가져오는 destroy 메소드를 만든 다음 destroy_all 메소드를 사용하여 양조장 API 내부의 모든 데이터를 삭제했습니다. 좋아하는 다른 모델에 대해서도 같은 작업을 수행해야 했습니다.
파괴 방법
def destroy
breweries = Brewery.all
if breweries.destroy_all
render json: { message: 'Breweries deleted' }
else
render json: { errors:
breweries.errors.full_messages }
end
end
노선
경로에 대해. 각 모델 경로에 delete HTTP 메서드를 추가해야 했습니다.
delete '/breweries' => 'breweries#destroy'
delete '/favorites' => 'favorites#destroy'
프런트 엔드
이제 프론트 엔드의 경우 JavaScript와 관련하여 제 기술이 그다지 좋지 않습니다. 문제가 바로 눈앞에 있음에도 불구하고 문제가 무엇인지 파악하는 데 매우 오랜 시간을 보냈습니다.
이벤트 리스너를 삭제 버튼에 바인딩
원래는 양조장 카드가 생성될 때 내부에 삭제 버튼이 렌더링되어 있었습니다. 이벤트 리스너가 그것을 인식하지 못해서 내가 한 것은 html 파일에 모든 맥주 양조장 지우기 버튼을 추가하고 대신 이벤트 리스너를 해당 버튼에 바인딩하는 것이었습니다. 지금 생각해보면 카드 내부에서 작동하게 만들 수도 있었지만 지금은 그대로 두겠습니다. 이벤트 리스너가 작동하도록 한 후에는 delete 메소드가 작동하도록 해야 했습니다. 이것은 그렇게 어렵지 않았습니다. 내가 해야 할 일은 removeBreweryCard 메서드와 removeBreweryFromApi 메서드를 호출하는 removeBreweries 클래스 메서드를 만드는 것뿐이었습니다(아마도 이것을 추가할 필요는 없었을 것입니다). 이 클래스 메소드는 또한 API에서 즐겨찾기를 삭제하기 위해 removeFavorites 메소드를 호출해야 했습니다.
removeBreweries() {
fetch(this.baseURL, {
method: "DELETE",
headers: {
"Content-Type": "application/json",
"Accept": "application/json"
},
})
this.removeBreweryCards();
this.deleteBreweryFromApi();
this.removeFavorites();
}
removeBreweryCards() {
const allCards = document.querySelector("
#brewery-card-container");
allCards.innerHTML = "";
}
deleteBreweryFromApi() {
return fetch(this.baseURL)
.then(resp => resp.json())
.catch(error => console.log("Error: " + error));
}
removeFavorites() {
console.log("Hello")
fetch(this.favoritesURL, {
method: "DELETE",
headers: {
"Content-Type": "application/json",
"Accept": "application/json"
},
})
console.log("removing favorites");
this.removeFavoritesFromApi();
console.log("Removing All Favorites Now");
}
이 모든 것이 계획대로 정확하게 작동했으며, 이러한 항목을 추가한 후 삭제 버튼에 다른 많은 작업을 수행할 필요가 없었습니다.
미사용 속성
그래서 즐겨찾기가 여러 시간 동안 제대로 반복되지 않는 이유를 파악하기 위해 내 코드를 살펴본 후 id 속성이 전혀 사용되지 않는다는 것을 깨달았습니다. 기본적으로 새 양조장을 제출할 때 양조장 이름으로 모든 것을 밀어붙이고 있었는데, 이것이 바로 제가 원했던 것입니다. 잠시 동안 깨닫지 못한 것은 내 POST 메서드가 아닌 생성자의 일부로 ID가 있다는 것입니다. 다음과 같이 양식 데이터를 배열로 푸시했습니다.
this.breweries = []
this.breweries.push(new Brewery(brewery.attributes.id, brewery.attributes.name, brewery.attributes.city, brewery.attributes.state, beers))
const brewery = new Brewery(form[0].value, form[1].value, form[2].value, form[3].value)
// form[0].value was coming back as id but was suppose to be coming back as name
// so it was id: "Brewery Name 1", Name: "City 1", City: "State 1", State: "Favorites"
내가 해야 할 일은 ID를 얻는 모든 곳을 제거하는 것뿐이었고 모든 것이 다른 오류 없이 작동했는데 정말 흥미로웠습니다.
결론
저는 JavaScript에 점점 익숙해지기 시작했습니다. 확실히 제 기본 언어는 아니지만 JavaScript가 더 편해졌습니다. 백엔드와 좀 더 잘 상호 작용하는 방법, 이벤트 리스너 및 객체 지향 JavaScript를 이해하는 방법을 알고 있습니다.
Reference
이 문제에 관하여(DELETE 메서드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/evanrpavone/the-delete-method-5i9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)