

railsでパラメータを設定するとき、値に制限をかけるにはどうしたらよいのでしょうか。

`:age`に年齢を入れてパラメータを渡す例です。

`get /user/list/:age/ => "user#list"`

この場合、`:age`の条件は

  * 数字
  * 3桁以内
  * 最大値は125(とりあえず)

となるので、これ以外の条件以外をはじきたいのですが、どうやって設定するのでしょうか。


CC BY-SA 3.0
2015-04-11T11:44:06.057
9053
2015-04-11T14:18:18.610
5855
question
ruby-on-rails
railsでurlからのパラメータに制限をかけたい


「数字3桁以内」という条件であれば、`:constraints` を使って次のように書くことになります。

[code]

    get "/users/list/:age" => "users#list", :constraints => {:age => /\d{1,3}/}
    
[/code]

具体的な数字まで指定するのであれば、正規表現を少し工夫して

[code]

    get "/users/list/:age" => "users#list", :constraints => {:age => /\d{1,2}|1[01]\d|12[0-5]/}
    
[/code]

とするか、`lambda` を使って次のようにするかです。

[code]

    get "/users/list/:age" => "users#list", :constraints => lambda { |req|
      age = req.env["action_dispatch.request.path_parameters"][:age]
      age =~ /\A\d{1,3}\z/ and age.to_i <= 125
    }
    
[/code]

ただし、`routes.rb` では「数字である」程度の指定にとどめておいて、範囲はコントローラで判定するのが分かりやすい気はします。


CC BY-SA 3.0
2015-04-11T14:18:18.610
9054
2015-04-11T14:18:18.610
76
9053
answer