Ruby on rails 如何为所有操作使用按请求查找而不是ID来自定义ActiveAdmin

Ruby on rails 如何为所有操作使用按请求查找而不是ID来自定义ActiveAdmin,ruby-on-rails,ruby-on-rails-3,activeadmin,Ruby On Rails,Ruby On Rails 3,Activeadmin,我刚刚将ActiveAdmin添加到我的应用程序中,我在使用show/edit/destroy操作时遇到问题,因为我的链接不指向ID,而是指向用户名(以便用户更容易阅读) ActiveAdmin正确创建我的链接,如: 编辑链接: http://localhost:3000/admin/users/paul/edit (其中paul是用户名) 在这种情况下,我得到: 找不到ID为的用户 因为Paul当然不是id而是用户名 如何自定义ActiveAdmin在我的应用程序中使用find_by_name

我刚刚将ActiveAdmin添加到我的应用程序中,我在使用show/edit/destroy操作时遇到问题,因为我的链接不指向ID,而是指向用户名(以便用户更容易阅读)

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

编辑链接:
http://localhost:3000/admin/users/paul/edit (其中paul是用户名)

在这种情况下,我得到:

找不到ID为的用户

因为Paul当然不是id而是用户名

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


在另一个模型中,我得到了一个所谓的“SID”,它是一个生成的salt 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

如果您遵循此railscast:并拥有自定义路由,则可以通过将其放置在app/admin/user.rb中来修复活动的\u管理员路由:

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

它与afiah展示的非常接近,只是略有不同。

有一种更干净的方法可以做到这一点:

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

看看这个相关的问题,被接受的答案也是你问题的解决方案:今晚我会试试,这是由于to_param命令的作用。试过之后我会和你保持联系。非常感谢:)