спасение от ActiveRecord:: RecordNotFound в направляющих

Пользователь может только отредактировать его собственное сообщение, таким образом, я использую следующее, чтобы проверить, может ли пользователь ввести форму редактирования:

  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

Но это не работает, никакие идеи, что я делаю неправильно?

39
задан ocodo 7 November 2013 в 00:37
поделиться

2 ответа

Если вы хотите использовать оператор спасения, вам нужно использовать find () таким образом, чтобы он генерировал исключения, то есть передавал идентификатор, который вы хотите найти.

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
59
ответ дан 27 November 2019 в 02:11
поделиться

Выяснилось, что вы неправильно использовали команду rescue and find (: first).

find: first возвращает nil, если ни одна запись не соответствует условиям. Он не вызывает ActiveRecord :: RecordNotFound

try

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
ответ дан 27 November 2019 в 02:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: