このように使用できるのは事実ですが、パラメーターを取得して||=
から設定するのは非常に奇妙なことです。パラメータから変数を設定する可能性が高くなります。したがって、これの代わりに:
params[:start] ||= 0
確かにあなたはこれをしている可能性が高いです:
start = params[:start] || 0
それを行う場合は、フェッチを使用することをお勧めします
start = params.fetch :start, 0
ルートの前にパラメーター ハッシュのデフォルト値を本当に探している場合は、 before フィルターを使用します。
before "/comments/?" do
params[:start] ||= 0
end
アップデート:
ルート パターンからパラメーターを取得する場合、ブロック パラメーターを使用して既定の引数を指定できます。これは、Ruby (v1.9 以降) がブロックの既定のパラメーターを取得できるためです。
get "/comments/:start/?" do |start=0|
# rest of code here
end
start
パラメーターは、ローカル変数 (ブロックに指定) または (ルートの詳細についてはドキュメントを参照) を介してstart
利用できparams[:captures].first
ます。
さらに更新:
ルートを動詞メソッド (例: 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 にしました。