2016-05-02 6 views
0

一般的に私のレポートページからのURLは次のようになります。Railsルーティングは、urlのidをid-nameに置き換えることがあります。どうすれば問題を回避できますか?

http://test-account.peter:3000/offices/7/reports/index 

しかし、時にはそれは次のようになります。

http://test-account.peter:3000/offices/7-peters-office/reports/index 

これはなぜ起こるのでしょうか?

コントローラーアクションをGETからPOSTに変更して名前を変更するまでは、実際には問題にはなりませんでした。これを行う必要があったので、ajaxリクエストにもっと多くのパラメータをパックすることができました。ユーザーはサイトのこのセクションをブックマークしていて、1日中エラーが発生します。

get '/offices/*all/reports/index' => 'offices#show' 
    get '/offices/:office_id/reports/index' => 'offices#show' 
    get '/offices/:office_name/reports/index' => 'offices#show' 

名前をキャッチする方法はあります:

私はルートをリダイレクトしようとしましたか?または、最初にURLに名前が追加されないようにする必要がありますか?

答えて

0

コントローラでは、パラメータを解析して最初の文字を取得し、整数であるかどうかを確認できます。しかし、パラメータがどのように異なる値に割り当てられるかをデバッグし、idだけが使用されていることを確認する方がはるかに良いでしょう。ビューでそのルートにリンクしている場合は、リンクで何が渡されているかを確認し、値が期待どおりであることを確認します。

0

Railsは、データベース内で一致するデータを検索しません。したがって、データを見ることなく、3つのルートはまったく同じです。変数(office_id & office_name)はちょうど異なる名前が付けられています。 example/offices /:office_name/reports/indexにリクエストがある場合、両方のルートがリクエストに一致するため、最初のものと一致します。

パスに名前またはIDを示すものが必要です。あなたが本当に同じ検索で名前とIDを持っていない場合、あなたはただ一つのルートを持つことができ、コントローラ内のDBからIDまたは名前を照合しようとすることができます。

関連する問題