确实可以使用||=
这样设置,但是设置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.