Sinatra/Ruby 默认一个参数

2023-12-21

有没有办法在 Sinatra 中默认参数?

我目前正在寻找是否'start'作为参数传递,但看起来有点hacky。如果我能告诉 Sinatra 在未指定的情况下默认某些参数,那就太好了。

get '/comments/?' do
   # want to setup page stuff, default to first page if not specified
   params[:start] = 0 if !params[:start] 
end

有任何想法吗?


确实可以使用||=这样设置,但是设置params是一件很奇怪的事情after检索它们。您更有可能设置变量from参数。所以代替这个:

params[:start] ||= 0

当然你更有可能这样做:

start = params[:start] || 0

如果你打算这样做,那么我建议使用fetch http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-fetch

start = params.fetch :start, 0

如果你是really在路由之前的参数哈希中查找默认值,然后使用过滤前 http://www.sinatrarb.com/intro.html#Filters

before "/comments/?" do
  params[:start] ||= 0
end

Update:

如果你正在接受一个参数从路线模式那么你可以通过使用块参数给它一个默认参数,因为Ruby(从v1.9开始)可以采用块的默认参数,例如

get "/comments/:start/?" do |start=0|
  # rest of code here
end

The start参数可通过start局部变量(赋予块)或通过params[:captures].first (see 有关路线的更多信息,请参阅文档 http://www.sinatrarb.com/intro#Routes).


进一步更新:

当您将路由传递给动词方法时(例如get)Sinatra 将使用该路由来匹配传入请求。匹配的请求会触发给定的块,因此明确您想要一些默认值的简单方法是:

get "/comments/?" do
  defaults = {start: 10, finish: 20}
  params = defaults.merge params
  # more code follows…
end

如果你想让它看起来更干净,请使用助手:

helpers do
  def set_defaults( defaults={} )
    warn "Entering set_defaults"
    # stringify_keys!
    h = defaults.each_with_object({}) do |(k,v),h|
      h[k.to_s] = defaults[k]
    end
    params.merge!( h.merge params )
  end
end

get "/comments/?" do
  set_defaults start: 10, finish: 20
  # more code follows…
end

如果您需要更重量级的东西,请尝试sinatra 参数 https://github.com/mattt/sinatra-param.


Sinatra::默认参数 gem

我非常喜欢这段代码我把它变成了宝石 https://rubygems.org/gems/sinatra-default_parameters.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sinatra/Ruby 默认一个参数 的相关文章

随机推荐

  • Azure Functions 部署时无法运行

    我是新来的 如果帖子不完整 抱歉 我正在尝试在 azure 上部署一个与 blob 交互的 python 脚本 该脚本在本地运行良好 我可以与我的存储帐户交互 上传和下载 blob 但是当我在 azure 上部署我的函数时 它不会运行 日志
  • bash 使用序列号批量重命名文件夹和子文件夹中的文件

    我需要一个 bash 脚本来执行以下操作 对于文件夹及其子文件夹中存在的特定类型的每个文件 它都会在前面添加一个序列号 4 位数字 后跟一个分隔符 例如我有 Queen 1986 A Kind of Magic 01 One vision
  • 流程图 - 动态更改 y 轴

    我是飞行新手 但很快就设置了我的时间图 这是我基于时间的情节 plot placeholder d xaxis mode time minTickSize 1 month min new Date 2008 05 20 getTime ma
  • 为什么我需要将“get”包装在 J“lapply”调用中的虚拟函数中?

    我希望通过类或常见模式匹配等标准来处理列grep 我的第一次尝试没有成功 require data table test table lt data table a 1 10 ab 1 10 b 101 110 this does not
  • 在 Netbeans 内运行时停止 Tomcat

    我使用 NetBeans 运行 Apache Tomcat 6 当我的代码出现故障 例如 NullPointerException 时 tomcat 会失败并且不会运行任何其他请求 我的问题是我无法让 tomcat 停止 我必须重新启动整个
  • 查找 Java 应用程序中的连接泄漏

    我有一个应用程序在一段时间后开始出现内部服务器错误 我询问的一些人告诉我 这可能是因为我的应用程序中的连接泄漏 我开始搜索并发现这个查询来模拟连接泄漏 select LAST CALL ET SQL TEXT username machin
  • 堆积条形图未正确更新 d3js

    In this https plnkr co edit X7JYRLCKgBnasP86FRgQ p preview堆积条形图我添加了一个平分线和一个自定义x invert函数 以便您可以读取每个月的值 问题是 当我添加此自定义函数时 团队
  • OpenXML SDK 2.0 与 Aspose 在 .NET 中生成服务器端 Word 2007 文档

    我将在 Net 中启动一个服务器端办公自动化项目 以下是计划的主要活动 创建一个word文档 使用现有的包含封面 页眉 页脚 目录的 Word 文档模板 保存存档 嵌入文件并调整大小 HTML 图像 Word Excel TOC 生成和格式
  • 我无法从数据库 PostgreSQL 生成 Hibernate 映射文件和 POJO?

    已经在数据库 PostgreSQL 中创建了表和关系 但是当我想生成 Hibernate 映射文件和 POJO 时 它们没有生成 我应用了所有适当的步骤hibernate cfg xml一代和hibernate reveng xml 我认为
  • 如何在没有数据库的情况下配置 Ruby on Rails?

    对于当前不需要数据库的小型网站项目来说 使用 Ruby on Rails 会很方便 我知道我可以在 MySQL 中创建一个空数据库并从那里开始 但是有人知道在没有数据库的情况下运行 Rails 的更好方法吗 Thanks For Rails
  • 对于矩阵向量乘法,行优先排序是否更有效?

    If M是一个 n x m 矩阵并且v and u是向量 那么就索引而言 矩阵向量乘法看起来像u i sum M i j v j 1 lt j lt m Since v是一个向量 对于面向数值计算的语言 其元素可能存储在连续的内存位置中 如
  • python 在pdf文件中搜索

    这是pdf结构的一部分 5 0 obj lt lt Length 56 gt gt stream BT F1 12 Tf 100 700 Td 15 TL JavaScript example Tj ET endstream endobj
  • matplotlib中如何限制y轴高度?

    如何限制matplotlib图中y轴的高度 我正在尝试显示 x 轴 并降低该一维图的图形高度 我尝试过设置刻度 图形大小 tight layout 边距等 但没有成功 另外 无论我选择什么限制 更改 ylimit 都会跨越整个图形高度 im
  • Maven 故障安全插件不运行并行测试

    我有一个 Maven POM 文件 当我提供并行执行选项时 我在日志中没有看到任何并行执行的迹象 XML 调试让我抓狂 有什么想法这里出了什么问题吗
  • 查找两条曲线之间的重叠面积

    我一直在努力寻找解决方案来找到两条曲线之间的重叠区域 我处理的不是具有已知参数的概率密度函数 而是通过平滑经验数据点获得的曲线 我发现的唯一提示是计算不重叠的区域 如这段代码 来自here https www researchgate ne
  • 使用 python 求解 7000x7000 线性系统时的最佳性能方法

    我需要一种有效的方法来反转 python 中的 7000x7000 空气动力学影响系数 密集 矩阵 在使用 FORTRAN 例程之前 我已经开始使用 LAPACK 中的 LU 分解例程来处理问题 我已经看到它在其他相关应用程序中的使用非常有
  • 用户输入数字时的 Javascript 计算器

    我是 Javascript 新手 但我正在尝试在我的网站上实现一些功能 用户可以在其中输入数量 并且小计会在输入时动态更新 例如 如果每件物品的价格为 10 美元 并且用户在文本字段中键入 5 我希望它在文本框旁边显示 50 美元 非常简单
  • REST - 使用 Spring MVC 返回创建的对象

    我有一个 REST 调用 它接受一个 JSON 对象 比如说一个人 创建此对象 经过验证并保存到数据库 后 我需要返回新创建的 JSON 对象 我认为标准做法是返回201 Accepted而不是立即返回对象 但我的应用程序立即需要新创建的对
  • 有人使用 Sphinx 来记录 C++ 项目吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Sinatra/Ruby 默认一个参数

    有没有办法在 Sinatra 中默认参数 我目前正在寻找是否 start 作为参数传递 但看起来有点hacky 如果我能告诉 Sinatra 在未指定的情况下默认某些参数 那就太好了 get comments do want to setu