从Rails中的ActiveRecord :: RecordNotFound救援

时间:2010-02-25 18:31:48

标签: ruby-on-rails activerecord

用户只能编辑自己的帖子,因此我使用以下内容检查用户是否可以输入编辑表单:

  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

但它不起作用,任何想法我做错了什么?

3 个答案:

答案 0 :(得分:56)

如果你想使用rescue语句,你需要以一种引发异常的方式使用find(),即传递你想要找到的id。

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

答案 1 :(得分:40)

您还可以使用ActionController的{​​{1}}方法。立即为整个应用程序做到这一点!

rescue_from

答案 2 :(得分:7)

原来你正在使用救援并且错误地找到(:第一个)。

find:如果没有记录符合条件,则首先返回nil。它不会引发ActiveRecord :: RecordNotFound

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