对于特定角色(用户组),我将:readonly添加到活动记录中的每个查找
def self.find(*args)
if User.current_user.has_role? 'i_can_only_read'
with_scope({:find => {:readonly => true}}) do
result = super *args
end
end
end
当然它现在引发了Controller中的ActiveRecord :: ReadOnlyRecord Exceptions传递给用户;不是很好。
我可以在一个地方发现这种错误吗?就像在production.rb或application.rb中一样?或者我可以为此错误配置特定的错误页面吗?
答案 0 :(得分:2)
是的,只需像这样覆盖rescue_action_in_public:
class ApplicationController < ActionController::Base
...
def rescue_action_in_public(exception)
case exception
when ActiveRecord::ReadOnlyRecord
# DO SOME LOGIC HERE
end
end
end
end
这将在“生产”中执行您的操作,但是当您处于“开发”状态时,会为您留下信息性的堆栈跟踪。
Rails还有许多其他的rescue_action_ *方法可能更适合您的问题......请查看http://api.rubyonrails.org/classes/ActionController/Rescue.html