我正在对使用 ActiveAdmin 的 Rails 站点进行更改,包括将 URL 中使用的标识符更改为有意义的字符串。
在 ActiveAdmin 之外,只需更改to_param
每个模型的方法。这还更改了为 ActiveAdmin 页面上的链接生成的 URL,但要让 ActiveAdmin 模型响应新 URL,还需要更改 ActiveAdmin 注册,如中所述这个答案 https://stackoverflow.com/a/7717831/776723.
该网站上的模型之一在一些有意义的标识符中使用点/句点。 (这不是我可以改变的。)Rails 基于扩展名的格式识别会导致这些记录出现问题。在 ActiveAdmin 之外,可以通过更改路由上的 id 约束来解决这些问题,如中所述这个答案 https://stackoverflow.com/a/5369702/776723。 (在此之上允许格式指定的扩展需要在控制器中进行一些额外的工作。)不幸的是,更改非 ActiveAdmin 路由的约束对任何 ActiveAdmin 路由没有影响。可以手动指定 ActiveAdmin 路由(而不是仅仅依赖ActiveAdmin.routes(self)
),如中所述这个答案 https://stackoverflow.com/a/12570766/776723,但我还没有找到一种方法来允许对适用于非 ActiveAdmin 路由的约束进行相同的更改。
如何更改 ActiveAdmin 路由中 id 的限制以允许包含点?
以下是获得正确路由但不允许点的两种尝试:
get "/admin/motors/:id", id: /[^\/]+/, controller: "admin/motors", action: "show"
get "/admin/motors/:id", constraints: { :id => /[^\/]+/ }, controller: "admin/motors", action: "show"
问题中的尝试都是正确的,但是它们必须出现在ActiveAdmin.routes(self)
; from 导轨由外向内布线 http://guides.rubyonrails.org/routing.html:
Rails 路线按照指定的顺序进行匹配,因此如果您有resources :photos
上面一个get 'photos/poll'
the show
的行动路线resources
行将在之前匹配get
线。要解决此问题,请移动get
line above the resources
行,以便首先匹配。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)