在建设西纳特拉或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