2016-05-17 3 views
0

は、このRuby on Railsは、アクションで区別することができる一方で、1つのアクションに対して複数のルートを持つことができますか?私がやりたいのは何

get 'example/:id' => 'example#same_action'

とも

get 'slightly_different/:id' => 'example#same_action'

が、どのルールが使用されたようsame_action()の内側に区別することができるようなものです。

これは、モデルと部分的なリファクタリングでよりうまくいきますか?

+1

に基づく差別。 slightly_different /:id?param = 1 のようにURLの後ろにパラメータを変更して、パラメータを変更してロジックを追加することができます。 –

+0

私はそれを嫌うことはありませんが、可能ならばこれを避けることを望んでいました。 –

答えて

2

あなたはこのようにそれを行うことができます:あなたが同じ方法のいずれかの方法にアクセスすることができます

get ':something/:id', constraints: { something: /example|slightly_different/ } 

をしてsomethingのparam

1

一見、あなたが例えばパラメータ、に基づいて区別すべきであるに:

get 'example/:id' => 'example#same_action' 
get 'slightly_different/:different_id' => 'example#same_action' 

あなたはのparamを使用しない場合、あなたはこのtecniqueを検討することもできます

get 'example/:my_url' => 'example#same_action', constraints: { my_url: /normal|slightly_different/ } 

最初に共通のルートを追加する必要があります

+0

ああ。かなり良いアイデア。パラームのないルートだったら唯一の問題だろうか? 「example」と「slightly_different」だけですか? –

+0

私の更新された回答を見る –

1

もう少し考えてみると、これはオプションかもしれませんが少し厄介なようです:

は、より良い方法があると期待して"/slightly_different"

を返します。

関連する問題