我在application_controller.rb
处理RecordNotFound错误如下:
rescue_from ActiveRecord::RecordNotFound, :with => :record_not_found
private
def record_not_found
flash[:error] = "Oops, we cannot find this record"
redirect_to :back
end
但是我希望获得更多信息,例如找不到哪条记录的类/表名。 我应该怎么做呢?
谢谢。
答案 0 :(得分:3)
您可以在救援处理程序中定义参数,并在那里传递异常。
def record_not_found exception
flash[:error] = "Oops, we cannot find this record"
# extract info from exception
redirect_to :back
end
如果您无法从例外中获取该信息,那么您运气不好(我认为)。
答案 1 :(得分:2)
比如说,
begin
@user = User.find(params[:id])
rescue ActiveRecord::RecordNotFound
flash[:notice] = "#No such record in User for id :: {params[:id]} on #{action_name}"
end
<强>更新强>
flash[:notice] = t('flash.recordnotfound',:class_name => self.class.name, :column_name => params[:id], :action_name => action_name)
现在在config/locales/en.yml
(这有助于翻译,请参阅i18n here)
flash:
recordnotfound: "Sorry, no record od %{column_name} in class %{class_name} was found on you action %{action_name}"
如果您不想使用区域设置,只需在flash[:notice]
本身中提供此信息。
更有活力?
编写一个函数并在那里使用相同的flash [:notice]。一点都不疼。
想要更多数据?
这是一个快速的解决方案,我总是<%= params%>
在我看来很容易知道最新情况和最新情况。然后,您可以打开rails控制台并播放不同的操作等等。
user = User.new
user.save
user.errors.messages
我认为所有这些都是足够好的数据。
祝你好运。答案 2 :(得分:2)
我在这方面取得了一些成功:
# in app/controllers/application_controller.rb
rescue_from ActiveRecord::RecordNotFound, with: :record_not_found
def record_not_found exception
result = exception.message.match /Couldn't find ([\w]+) with 'id'=([\d]+)/
# result[1] gives the name of the model
# result[2] gives the primary key ID of the object that was not found
end
HTH
编辑:在正则表达式结束时删除了空格错误。感谢评论者。 :)
答案 3 :(得分:0)
实例化模型后,您可以查看类似的内容。
human = Human.new
human.errors
在rails控制台中查看此内容,以便您可以使用它并在主控制器中使用它。
rescue_from ActiveRecord::RecordNotFound do |exception|
raise ActiveRecord, exception.message, exception.backtrace
end
修改强> 确保应用程序控制器扩展基础。
class ApplicationController < ActionController::Base
rescue_from Exception, :with => :record_not_found
private
def record_not_found(e)
flash[:error] = "Oops, we cannot find this record" + e.message
redirect_to :back
end
end