Пользователь может только отредактировать его собственное сообщение, таким образом, я использую следующее, чтобы проверить, может ли пользователь ввести форму редактирования:
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
Но это не работает, никакие идеи, что я делаю неправильно?
Если вы хотите использовать оператор спасения, вам нужно использовать 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
Выяснилось, что вы неправильно использовали команду 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