저는 reddit와 비슷한 간단한 upvote/downvote 시스템을 만들고 있는데, 사용자가 뭔가를 upvote/downvote하고 필요할 경우 마음을 바꿀 수 있습니다.레일즈 컨트롤러가 쿼리를 무시합니다.
내 컨트롤러의 '만들기'작업에 대한 AJAX 호출을하는 페이지가 있습니다. 컨트롤러는 레코드를 생성하고 적절한 js.erb를 반환하는 데 아무런 문제가 없습니다. 그러나 기존 게시물이 있는지보고 싶습니다. 그렇다면 삭제하고 싶습니다. 내 컨트롤러는 다음과 같습니다
는def create
@vote = GameVote.new
@vote.game_id = params[:game_id]
@vote.vote = params[:vote]
@vote.user_id = session[:user_id]
existing_vote = GameVote.where(whatever)
respond_to do |format|
if @vote.save
format.js
end
end
end
단지는 새 항목을 저장하기 전에 존재하는 경우를 파괴에서 저를 방지, 중간 쿼리를 무시하는 것 같다. 어떤 아이디어?
귀하의 질문에 정확히 무엇입니까? 기존 투표를 찾는 방법? 그것을 삭제하는 방법? 당신이 보여주고있는 코드에서 문제가 무엇인지는 매우 불분명하다. – Mischa
안녕하세요 @ Mischa - existing_vote = GameVote.where (뭐든간에) 해고 당하지 않습니다. 서버 콘솔 내에서 쿼리가 실행되는 것을 볼 수 없으며 그 이유를 파악할 수 없습니다. 적절한 논쟁을 통해 레일 콘솔에서 정상적으로 작동하지만 컨트롤러가 실제로이를 무시하는 것처럼 보입니다. 왜 그런지 궁금합니다. – opticon
레일즈는 필요할 때만 쿼리를 실행하기 때문입니다. 'existing_vote'로 아무 일도하지 않으므로 쿼리가 실행되지 않습니다. Rails에 내장 된 최적화 기능입니다. – Mischa