2012-01-18 2 views
3

私はちょうど少しビットの余分なロジックをrotues.rbでしたいと思います、それはおそらくそこに属していませんが、それは私にとって最も理にかなっているようです。Rails 3経路で整数を検出するには?

私は2つの矛盾するルートを持っています。プリミティブにする:

ここで、browsebyはタグでビデオをブラウズするための "タグ"などの文字列を探しています。しかし

、(そしておそらくこれが来るのを見た)私も(再び原始的な形で)私の基本的なショーのリソースを持っている:

match '/videos/:id' => 'videos#show', :as => "video" 

:idはビデオIDの整数を探しています。

のようなロジックの小さなビットを追加する方法はあり

...
match '/videos/:id' => 'videos#show', :as => "video", :format(:id) => :integer 

(私の仮説的なレールの構文されており、私が探しているかを示すのに役立ちます。)

私はコントローラーレベルでこれを試すことができると知っていますが、それはルートレベルでそれを処理する方が理にかなっています。

答えて

5

あなたは:constraintsと正規表現を使用して試みることができる:あなたはまた、緩い:browsebyバージョンが:idバージョンの後に来ることを確認したいと思う

match '/videos/:id' => 'videos#show', :as => "video", :constraints => { :id => /\d/ } 
match '/videos/:browseby' => 'videos#browse', :as => "browse_by" 

:browsebyの値が数字で始まらない限り動作するように、regex constraints are implicitly anchored at the beginningに注意してください。

あなたはuse an object for the constraintその後、数字ででき始めるんし、その後、あなたの正規表現にアンカーを含めることができ、タグを使用している場合:

class VideoIdsOnly 
    def matches?(request) 
     request.path =~ %r{\A/videos/\d+\z} 
    end 
end 

match '/videos/:id' => 'video#show', :as => "video", :constraints => VideoIdsOnly.new 
match '/videos/:browseby' => 'videos#browse', :as => "browse_by" 
+0

さて、あなたに感謝し、考え抜かと明確に説明。 –

+0

@カイル:ありがとう、そこに行って、私の母は私に分かち合うように教えた。私は 'VideoIdsOnly'バージョンでいくつかの推測をしなければなりませんでした。 –

+0

しかし、そのような方法のように思えますし、その実装は実際には全く新しいレベルの動的ルートをもたらす可能性があります。 –

関連する問題