如何更改ActiveAdmin路由ID的约束?

时间:2016-05-09 21:23:07

标签: ruby-on-rails activeadmin

我正在对使用ActiveAdmin的Rails站点进行更改,包括将URL中使用的标识符更改为有意义的字符串。

在ActiveAdmin之外,只需更改每个模型的to_param方法即可。这也改变了为ActiveAdmin页面上的链接生成的URL,但要使ActiveAdmin模型响应新URL,还需要按this answer中所述更改ActiveAdmin注册。

此网站上的其中一个模型在某些有意义的标识符中使用了点/句点。 (这不是我可以改变的。)Rails'基于扩展的格式识别会导致这些记录出现问题。在ActiveAdmin之外,可以通过更改this answer中所述的路由上的id约束来解决这些问题。 (在此基础上允许指定格式的扩展需要在控制器中进行一些额外的工作。)不幸的是,更改非ActiveAdmin路由的约束对任何ActiveAdmin路由都没有影响。可以手动指定ActiveAdmin路由(而不是仅仅依赖于ActiveAdmin.routes(self)),如this answer中所述,但我还没有找到一种方法可以实现相同的约束更改非ActiveAdmin路由。

如何更改ActiveAdmin路由中的ID约束以允许包含点?

以下是两次尝试使路由正确但无法允许点:

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

1 个答案:

答案 0 :(得分:1)

问题中的尝试都是正确的,但是,它们必须出现在ActiveAdmin.routes(self)之前;来自Rails Routing from the Outside In

  

Rails路由按照指定的顺序进行匹配,因此如果resources :photos get 'photos/poll' show行动的resources行为高于get该行将在get行之前匹配。要解决此问题,请将resources上方移至@font-face { font-family:'newfont'; src:url('../website/fonts/kulminoituva.eot'); src:url('../website/fonts/kulminoituva.eot?#iefix') format('embedded-opentype'), url('../website/fonts/kulminoituva.woff') format('woff'), url('../website/fonts/kulminoituva.ttf') format('truetype'); font-weight:normal; font-style:normal; } 行,以便首先匹配。