Почему мой контроллер rails не останавливает выполнение после того, как я вернул false в приватном методе? - PullRequest
0 голосов
/ 22 сентября 2011

Когда я запускаю ajax POST delete на моем следующем контроллере, для записи, которая уже была удалена, rails вызывает ошибку "undefined метод` destroy "для nil: NilClass". Но почему это все еще говорит об этом, когда я пытался отобразить ответ в методе find_follow, предшествующем вызову destory? Разве выполнение не должно останавливаться внутри find_follow?

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

1 Ответ

1 голос
/ 22 сентября 2011

Ваш find_follow возвращает ноль, что нормально, но при вызове метода destroy вам нужно написать return только в destroy методе

Попробуйте

def destroy
    return find_follow

Вы можететакже используйте before_filter что-то вроде следующего

class FollowsController < ApplicationController
 before_filter :find_follow, :only=>[:destroy]

 def find_follow
     @follow = current_artist.follows.find_by_id(params[:id])
     if @follow.nil? 
        redirect_to(artist_follows_path(current_artist),:notice => "#{e}")
     else
      return true
    end
  end


  def destroy
    if (@follow.destroy)
       # respond_to html, js, json...

    end

  end
end
...