2016-08-01 6 views
2

Ich habe eine ERB-Vorlage, dieWie man aus Fehlern in einer Rails-Vorlage (ERB-Datei) zu retten

sample.html.erb

<h1>All The Stuff</h1> 
<% all_the_stuff.each do |stuff| %> 
    <div><%= stuff %></div> 
<% end %> 

lib/random_file.rb

def all_the_stuff 
    if ALL_THE_STUFF.exists? 
     ALL_THE_STUFF 
    else 
     fail AllTheStuffException 
    end 
end 
einige Hilfsmethoden von anderen Edelsteinen hat

Nun, wenn ALL_THE_STUFF nicht vorhanden sind, werde ich eine 10 bekommen. Dies wird jedoch nicht als Ausnahmebehandlung auf der Controller-Ebene abgefangen. Im Falle der Controller, ich retten Ausnahmen in der ApplicationController mit rescue_from. Gibt es einen einzigen Ort, um dies für alle meine ERB-Vorlagen zu setzen?

Wie gehe ich mit Ausnahmen um, die in einer Vorlage abgefangen werden (nicht aufgrund von Controller-Code)?

+1

'beginnen ... Rettung ... Ende' funktioniert gut in ERB. –

+0

Ich hätte klarer sein sollen. Im Falle meines Anwendungscontrollers kann ich einen 'rescue_from'-Block zur Rettung erstellen, aber es gibt keinen solchen Ort, um dies für alle Vorlagen zu tun. – absessive

+0

Sie sollten es auf die gleiche Weise tun können: rescue_from ActionView :: Template :: Error, mit:: your_method_here – fanta

Antwort

-1

Ich glaube, eine bessere Lösung die folgende wäre:

class ThingsController < ApplicationController 
    def sample 
    @things = Thing.all 
    end 
end 


# views/things/sample.html.erb 
<h1>All The Things</h1> 
<% if @things.present? %> 
    <% @things.each do |thing| %> 
    <div><%= thing %></div> 
    <% end %> 
<% else %> 
    There are no things at the moment. 
<% end %> 

Dies ist die Schienen Weg und vermeidet unter Verwendung eines beliebigen Exception Klasse als Steuerstrom, der in der Regel eine schlechte Idee ist.

Verwandte Themen