2016-05-09 3 views
0

URLで使用されている識別子を意味のある文字列に変更するなど、ActiveAdminを使用するRailsサイトを変更しています。ActiveAdminのルートIDの制約を変更するにはどうすればよいですか?

ActiveAdminの外では、各モデルのto_paramメソッドを変更するだけで十分でした。これにより、ActiveAdminページのリンク用に生成されたURLも変更されましたが、新しいURLに対応するActiveAdminモデルを取得して、this answerで説明したActiveAdminの登録を変更する必要がありました。

このサイトのモデルの1つは、意味のある識別子のいくつかにドット/ピリオドを使用しています。 (これは私が変更できるものではありません)。拡張機能に基づくフォーマットの認識は、これらのレコードに問題を引き起こします。 ActiveAdminの外では、これらの問題は、this answerで説明されているように、ルート上のID制約を変更することで解決できます。残念ながら、非ActiveAdminルートの制約を変更しても、ActiveAdminルートには何の影響もありません。 this answerに記載されているように、ActiveAdminルートを(ActiveAdmin.routes(self)のみに依存するのではなく)手動で指定することは可能ですが、非ActiveAdminルートに対しても同じ制約が適用されるようにする方法はありませんでした。

ドットを含めることができるようにActiveAdminルートのIDの制約を変更するにはどうすればよいですか?ここで

は、ルーティングが権利を取得2つの試みがあるが、ドットできるように失敗:

get "/admin/motors/:id", id: /[^\/]+/, controller: "admin/motors", action: "show" 
get "/admin/motors/:id", constraints: { :id => /[^\/]+/ }, controller: "admin/motors", action: "show" 

答えて

0

問題の試みは両方とも正しいです、しかし、彼らはActiveAdmin.routes(self)前に現れなければなりません。

Railsのルートは、それらが指定されている順に一致している、あなたが持っているので、もしresourcesラインのresources :photosget 'photos/poll'上記showアクションのルートはget行の前にマッチします:Rails Routing from the Outside Inから。これを修正するには、getの行resources行に移動して最初に一致させます。

関連する問題