如何使用find_by请求而不是ID为所有操作自定义ActiveAdmin

只是将ActiveAdmin添加到我的应用程序,我使用show / edit / destroy操作时出现问题,导致我的链接不指向ID而是指向用户名称(为了使用户更具可读性)。

ActiveAdmin正确创建我的链接,如:

编辑链接: http://localhost:3000/admin/users/paul/edit (where paul is the user name)

在这种情况下,我得到: Couldn't find User with ID=paul

当然,保罗不是id,而是用户名。

如何在我的应用程序中自定义ActiveAdmin以使用find_by_name(params [:id])来执行所有操作show / edit / delete。

在其他模型中,我得到了一个所谓的“SID”,它是一个生成的盐渍ID,我也想使用find_by_sid(params [:id])以及其他模型。

非常感谢。

干杯..

这将在app / admin / user.rb中完成:

 ActiveAdmin.register User do before_filter :only => [:show, :edit, :update, :destroy] do @user = User.find_by_name(params[:id]) end end 

有一种更简洁的方法:

 ActiveAdmin.register User do controller do defaults :finder => :find_by_slug end end 

如果你按照这个railscast: http: //railscasts.com/episodes/63-model-name-in-url-revised并拥有自定义路由,你可以通过将它放在app / admin / user.rb中来修复active_admin路由。 :

 before_filter :only => [:show, :edit, :update, :destroy] do @user = User.find_by_slug!(params[:id]) end 

它与afiah所显示的非常接近,略有不同。