- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在构建 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 中这是通过“资源”建模的。我的 Controller 往往是混合的,部分路由将取决于资源 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
最佳答案
如果你想在知道请求无效/发生错误后立即停止处理请求,你可以使用 Sinatras halt
。它会立即停止进一步处理,并允许您定义一个 http 状态代码和要显示的消息,如果您的应用程序不是关于 REST API 的,您可以定义相应的错误模板。
在您的示例中,请求无效,因为请求的资源不存在。用 404 回答是正确的,你可以告诉 halt
在响应中使用这个状态代码。
一个非常简单的实现看起来像这样:
get '/resource/:id' do
resource = Resource.find(params[:id])
halt 404, "A Resource with id #{params[:id]} could not be found" if resource.nil?
# ..
end
一个更优雅的方法是使用一个关心错误处理的辅助方法加载资源,你最好在所有路由中使用相同的调用。
helpers do
def load_resource
Resource.find(params[:id]) || halt(404, "A Resource with id #{params[:id]} could not be found")
end
end
get '/resource/:id' do
# load the resource via helper method
resource = load_resource
# if the resource doesn't exists, the request and processing is already dropped
..
end
halt
有更多的输出选项,如前所述,您可以返回一个 erb 模板,您还可以返回 JSON 而不是纯文本等等。 Check the docs here .
关于ruby - 如何在 sinatra/padrino 应用程序/ Controller 中干涸(失败)实体获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25971766/
我用 Sinatra 和 Padrino 编程已经有一段时间了。但是,我仍然无法为 Padrino 找到正确的身份验证和授权解决方案。让我解释一下我的期望以及我已经尝试过的内容。 使用 Sinatra
我知道在 Rails 中我可以做类似的事情 app.get 'url' app.response 但这在 Padrino 中不起作用,任何常规 controller 调用也不起作用,因为 Padrin
我需要在 Padrino 中创建一个自定义日志文件,其中包含标准输出中的所有日志记录信息以及自定义日志消息。我已经能够创建自定义日志文件,但仍然创建了标准输出文件(development.log、pr
我正在寻找一种在 Padrino 中打开和使用 websockets 的方法应用。我知道 Padrino 使用单线程,但我正在寻找一种方法来打开 websocket 并在其“onopen”、“oncl
gem 文件: # Component requirements gem 'bcrypt-ruby', :require => "bcrypt" gem 'sass' gem 'haml' gem '
我需要使用 RMagick 在我的 Controller 中即时创建图像文件并将它们发送到浏览器。看起来很简单,但是我找不到方法。我试过只是简单地 render 它们,但由于数据是二进制的,所以它失败
我在设置我的 padrino 项目中的默认 ActiveSupport::TimeZone 时遇到问题。 在我的 boot.rb 中有 Padrino.after_load do Time.zon
背景:我正在使用 Padrino、Ruby 1.9.2 构建一个简单的博客,HAML 和 Heroku。我希望帖子索引具有类似杂志的外观给它。对于索引中的每个帖子,用户应该看到标题、内容预告片和图像。
我有一个框架 Padrino (0.10.7) 项目,几乎没有代码。我正在尝试在 boot.rb 中插入一个中间件: ## # Add your after (RE)load hooks here #
我正尝试在 Padrino 中做一些基本的事情,但是大量的搜索都没有找到任何答案。我正在尝试从模型访问全局设置。我在 environments.yaml 文件的“开发”部分添加了一行名为“端点”的行,
我一直在我的一个项目中尝试 Padrino 框架,有一件事让我很恼火。例如,我只想使用 OmniAuth 实现用户注册过程,并想打破我的请求处理程序( Controller 的操作)以分离方法,如下所
我正在使用 padrino websockets ( https://github.com/dariocravero/padrino-websockets ) 为我的网站提供聊天系统,它在我的本地计算
不幸的是一开始就迷路了。使用官方指南创建第一个 test_app http://www.padrinorb.com/ 当尝试启动“padrino start”应用程序时,服务器在控制台中运行良好,但当
我已经进行了详尽的搜索,但找不到这个问题的答案。 我正在使用 padrino 编写一个小应用程序,我有 2 个 View ,人物和事件。我有这些的 View 和 Controller ,它们工作正常。
如何为 padrino + mysql Web 应用程序设置多个数据库。我已经尝试使用 activerecord 进行“建立连接”。我发现数据库未找到问题。 最佳答案 我想这取决于您使用的 ORM(在
我已经开始学习 Ruby,直接使用 Haml 学习 Padrino。 大多数 Padrino 文档都假定您具有高水平的 Ruby/Sinatra 等知识... 我正在寻找可以浏览以了解其工作原理的示例
是否可以像 postgresql 或 mysql 生成器一样将 redis 与 Padrino 一起使用。 最佳答案 看看Ohm .它是 Padrino 支持的 ORM,类似于 Active Mode
我是 Ruby 和 Sinatra/Padrino 的新手,所以如果我遗漏了一些非常简单的东西,我深表歉意。 我的 Sinatra 运行良好,因为我可以构建一个非常简单的“hello”应用程序并查看它
我对 Padrino(我来自 PHP 背景)和一般的 ruby web 框架非常陌生,并且一直在尝试弄清楚如何实现一个简单的用户身份验证和 session 管理系统,但还没有真正找到关于这个主题的
我是 Padrino 的新手,一直在学习示例博客教程。使用下面的示例代码时出现 NoMethodError # app/views/posts/index.haml @title = "Welcome
我是一名优秀的程序员,十分优秀!