2016-08-01 50 views
2

我有從其他寶石如何從錯誤中挽救在Rails模板(ERB文件)

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 
一些輔助方法ERB模板

現在,如果ALL_THE_STUFF不存在,我會得到ActionView::Template::Error。但是,這不會被控制器級別的異常處理所捕獲。 在控制器的情況下,我使用rescue_from拯救了ApplicationController中的例外。有沒有一個地方可以把它放在我所有的ERB模板中?

如何處理在模板中捕獲的異常(不是由於控制器代碼)?

+1

「開始......救援......結束」在ERB中工作得很好。 –

+0

我應該更清楚。在我的應用程序控制器的情況下,我可以做一個'rescue_from'塊來救援,但是沒有這樣的地方可以完成所有的模板。 – absessive

+0

你應該可以用同樣的方法做到這一點:rescue_from ActionView :: Template :: Error,用::your_method_here – fanta

回答

-1

我認爲一個更好的解決辦法是以下幾點:

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 %> 

這是軌道的方式和使用任何Exception類作爲控制流,這通常是一個壞主意避免。