0
내 컨트롤러에서 ajax POST delete를 실행하면 이미 삭제 된 레코드에 대해 레일즈에서 "정의되지 않은 메서드`destroy '가 nil : NilClass"라는 오류를 발생시킵니다. 그런데 왜 나는 destory 호출 이전의 find_follow 메소드에서 응답을 렌더링하려 할 때 여전히 그렇게 말하는가? find_follow 내에서 실행을 중단하면 안됩니까?개인 메서드에서 false를 반환 한 후 내 레일 컨트롤러가 실행을 멈추지 않는 이유는 무엇입니까?
class FollowsController < ApplicationController
def find_follow
begin
@follow = current_artist.follows.find(params[:id])
raise "Record Not Found" if @follow.nil?
rescue => e
respond_to do |format|
format.html { redirect_to(artist_follows_path(current_artist),:notice => "#{e}") }
format.js { render :text => "#{e}", :status => :not_found}
format.json {render :json => "#{e}", :status => 400}
end
return false
end
end
def destroy
find_follow
if (@follow.destroy)
# respond_to html, js, json...
end
end
end
이는 개인용 메소드에서 컨트롤러 실행을 중지 할 수 없음을 의미합니다. 파괴 방법에 대해서만? 레코드를 찾을 수 없을 때마다 find_follow 메소드가 실행을 중지하도록하여 컨트롤러를 DRY하려고했습니다. – Homan
제 편집 된 답변을 확인하십시오. 'find_by_id'를 쓰지 않습니다. Record Not Found – Salil
before 필터를 사용하면 제안대로 작동합니다. 그러나 나는 이것이 왜 효과가 있는지 확신하지 못한다. destroy 메소드와 별도의 메소드를 호출하는 것이 before_filter를 갖는 것과 같을 것이라고 생각했지만 분명히 ... – Homan