2009-07-30 2 views
0

für eine bestimmte Rolle (Gruppe von Benutzern) Ich habe das: Read-only zu jeder auf den aktiven Datensatz findenRoR Fang Exception auf Anwendungsebene

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 

Natürlich ist es wirft jetzt Active :: ReadOnlyRecord Ausnahmen in-Controller übergeben auf den Benutzer; nicht sehr nett.

Kann ich diese Art von Fehler an einem Ort finden? Wie in production.rb oder in der application.rb? Oder kann ich eine bestimmte Fehlerseite für diesen Fehler konfigurieren?

Antwort

2

Ja, einfach außer Kraft setzen rescue_action_in_public wie folgt aus:

class ApplicationController < ActionController::Base 
... 

    def rescue_action_in_public(exception) 
    case exception 
     when ActiveRecord::ReadOnlyRecord 
     # DO SOME LOGIC HERE 
     end 
    end 
    end 
end 

Diese Ihre Aktion ausgeführt wird, wenn in „Produktion“, aber Sie mit einem informativen Stack-Trace lassen, wenn Sie in „Entwicklung“ sind.

Rails hat eine Reihe von anderen rescue_action_ * Methoden, die für Ihr Problem besser geeignet sein könnten ... einen Blick auf http://api.rubyonrails.org/classes/ActionController/Rescue.html

+0

Ich sehe nur rescue_with_handler auf dieser Seite. Ist das korrekt? – lzap