web-dev-qa-db-fra.com

sauvetage d'ActiveRecord :: RecordNotFound dans Rails

Un utilisateur ne peut modifier que son propre message, j'utilise donc les éléments suivants pour vérifier si un utilisateur peut entrer dans le formulaire de modification:

  def edit
    @post = Load.find(:first, :conditions => { :user_id => session[:user_id], :id => params[:id]})
  rescue ActiveRecord::RecordNotFound
    flash[:notice] = "Wrong post it"
    redirect_to :action => 'index'
  end

Mais ça ne marche pas, des idées de ce que je fais mal?

39
Adnan

Si vous souhaitez utiliser l'instruction de sauvetage, vous devez utiliser find() d'une manière qui déclenche des exceptions, c'est-à-dire en transmettant l'ID que vous souhaitez rechercher.

def edit
  @post = Load.scoped_by_user_id(session[:user_id]).find(params[:id])
rescue ActiveRecord::RecordNotFound
  flash[:notice] = "Wrong post it"
  redirect_to :action => 'index'
end
58
Simone Carletti

Il s'avère que vous utilisiez le sauvetage et trouvez (: d'abord) incorrectement.

find: renvoie d'abord nil si aucun enregistrement ne correspond aux conditions. Il ne soulève pas ActiveRecord :: RecordNotFound

essayer

def edit
  @post = Load.find(:first, :conditions => { :user_id => session[:user_id], :id => params[:id]})
  if @post.nil?
    flash[:notice] = "Wrong post it"
    redirect_to :action => 'index'
  end
end
7
EmFi