2016-05-09 1 views
0

私は、クライアントが記事の任意のパスにマッチするいくつかのCMS機能を備えたアプリを開発中です。Rails:ルータにリクエストを送り返す

ここでは、任意のhtmlリクエストと一致するようにルートグロビングを使用して、表示する記事があればコントローラにチェックインします。アーティクルが存在しない場合は、ルート解決フローにリクエストを戻して、他の可能性のある一致を検索したいと思います。

私はそれには例外があるはずだと思いますが、私はそれを理解できません。それはRoutingErrorではありません。

答えて

0

アプリケーションファイルのルートを定義するときに、構成ファイル:config/routes.rbが上から下に実行されます。このファイルの一番上にキャッチオールを定義するだけです。

Constraintのようなものを使用することをおすすめします(結果をキャッシュすることもできます)。ので、私は `RoutingError`のような例外をスローこれは私がすでにやっているものですが、私はコントローラに別々の制約クラスと要因、それを避けたい

# config/routes.rb 
get '*', to: 'Article#show', constraints: ArticleConstraint.new 

# lib/article_constraint.rb 
class ArticleConstraint 
    def matches? 
    # Really trivial example... You could make this better, e.g. use cacheing! 
    Article.exists?(name: request.path) 
    end 
end 
+0

:たとえば、あなたのソリューションは次のように見えるかもしれません検索を続けるためにRailsルータを取得します。これは、すべてのコントローラを複数キャッチする場合に便利です。 –

+0

'複数のすべてのコントローラをキャッチする ' - これは私にとっては悪い考えです。 '/ articles/custom-path-1'、'/users/custom-path-2'は? –

+0

これは、異なるコントローラ間で競合の問題を回避し、アプリケーションのパフォーマンスを向上させるでしょう –

関連する問題