Я думаю, что у вас есть две проблемы: во-первых, ваша строка @item = Item.find(params[:id])
поднимает 404, и выполнение никогда не достигает того, что предполагалось (оператор if
).Во-вторых, вы вызываете исключения и никогда их не ловите.Попробуйте:
def destroy_oauth
begin
@item = Item.find(params[:id])
if(!@item.nil? && @item.user_id == current_user.id)
@item.destroy
respond_to do |format|
format.js
format.xml
end
else
raise ActionController::RoutingError.new('Forbidden')
end
rescue ActiveRecord::ResourceNotFound
redirect_to :action => 'not_found', :status => 404 # do whatever you want here
rescue ActionController::RoutingError
redirect_to :action => 'forbidden', :status => 403 # do whatever you want here
end
end
Что-то в этом роде, но вы также упомянули, что вы создаете API, поэтому, когда вы исправляете ошибку, вы можете захотеть отобразить xml
информацию об ошибке.Что-то вроде:
# in application_controller.rb
rescue_from ActionController::RoutingError, :with => :render_forbidden_error
private
def render_forbidden_error(e)
render :status => e.status, :xml => e
end
Удачи.Udachi.