在建設西納特拉或Padrino的應用程序,我經常寫這樣如何在Sinatra/padrino應用程序/控制器中幹掉(失敗)實體提取?
get '/resource/:id' do
resource = Resource.find(params[:id])
return status 404 if resource.nil?
# ..
end
代碼或實際上,我喜歡
flash[:warning] = "A Resource with id #{params[:id]} coud not be found".
redirect back
我認爲Rails中,這是通過「Ressources」爲藍本。我的控制器往往是混合的,部分路由將取決於資源ID(將從任何數據庫中獲取),其他則不會。
可以使用哪些圖案來烘乾它?我知道的before
處理 (僞代碼,但還沒有看到一個真正聰明的實現 - 它肯定有某處)
before "*" do
@resource = Resource.get(params[:id])
redirect_with_flash if @resource.nil?
end
或把類似的代碼的方法,先打電話與每個路線需求。
儘管如此,我在幾乎所有的Sinatra教程中都看到類似的代碼片段,是不是有更好的選擇?如果我忽略它,我特別感興趣的是padrino方法。
這裏是如何的代碼,我想有可能看起來像
MyPadrinoApp::App.controllers :user do
associated_resource = User
associated_resource_error_flashs = { "404": "A User with %s could not be found" }
get :show, :with => :id, :resource_bound => :user do
render '/user/show' # in which @user is available
end
end
謝謝。這似乎是一種有效且方便的方法,並「停止」使用的語義正確的東西。我會等待進一步的答案,並接受你作爲唯一可用的模式,如果沒有更多的來:) – Felix 2014-09-25 10:33:25
好,我對其他方法也很感興趣,即使我非常確定停下來的路要走。你可以在http://myronmars.to/n/dev-blog/2012/01/why-sinatras-halt-is-awesome找到一個更高級的例子。 – maddin2code 2014-09-25 10:38:49