Sinatra/Ruby默认参数 [英] Sinatra/Ruby default a parameter
本文介绍了Sinatra/Ruby默认参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
是否有方法默认Sinatra中的参数?
我目前正在查看是否将'start'
作为参数传递,但似乎有点老生常谈。如果我可以告诉Sinatra在未指定某些参数时将其设为默认值,那就太好了。
get '/comments/?' do
# want to setup page stuff, default to first page if not specified
params[:start] = 0 if !params[:start]
end
有什么想法吗?
推荐答案
确实可以这样使用||=
,但是在检索参数之后设置它们是非常奇怪的事情。您更有可能从参数设置变量。所以不是这样:
params[:start] ||= 0
您当然更有可能这样做:
start = params[:start] || 0
如果您要这样做,那么我建议您使用fetch
start = params.fetch :start, 0
如果您确实要在路由之前的参数散列中查找默认值,则使用before filter
before "/comments/?" do
params[:start] ||= 0
end
更新:
如果您从路由模式中获取参数,则可以使用挡路参数为其提供默认参数,因为Ruby(从1.9版开始)可以获取块的默认参数,例如
get "/comments/:start/?" do |start=0|
# rest of code here
end
start
参数将通过start
局部变量(赋给挡路)或params[:captures].first
(参见the docs for more on 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-param。
Sinatra::DefaultParameters gem
我非常喜欢这段代码I've turned it into a gem。
这篇关于Sinatra/Ruby默认参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文