【问题标题】:Rails: I installed ActiveAdmin and my devise link stopped workingRails:我安装了 ActiveAdmin,但我的设计链接停止工作
【发布时间】:2012-08-15 00:53:35
【问题描述】:

我已经安装了设计。
我有一个链接:<%= link_to "Sign up", new_user_registration_path %>

当我安装 ActiveAdmin(对于现有型号 User)时,此链接停止工作:

undefined local variable or method `new_user_registration_path'

我将 git diff 用于routes.rb,这里是(添加的行是黑色的):

ActiveAdmin.routes(self)
devise_for :users, ActiveAdmin::Devise.config

还有<%= link_to "Sign out", destroy_user_session_path, :method => :delete %> 现在指向/admin/logout

我该如何解决这个问题?

耙路线:

     admin_dashboard            /admin(.:format)                       {:action=>"index", :controller=>"admin/dashboard"}
         admin_codes GET        /admin/codes(.:format)                 {:action=>"index", :controller=>"admin/codes"}
                     POST       /admin/codes(.:format)                 {:action=>"create", :controller=>"admin/codes"}
      new_admin_code GET        /admin/codes/new(.:format)             {:action=>"new", :controller=>"admin/codes"}
     edit_admin_code GET        /admin/codes/:id/edit(.:format)        {:action=>"edit", :controller=>"admin/codes"}
          admin_code GET        /admin/codes/:id(.:format)             {:action=>"show", :controller=>"admin/codes"}
                     PUT        /admin/codes/:id(.:format)             {:action=>"update", :controller=>"admin/codes"}
                     DELETE     /admin/codes/:id(.:format)             {:action=>"destroy", :controller=>"admin/codes"}
         admin_users GET        /admin/users(.:format)                 {:action=>"index", :controller=>"admin/users"}
                     POST       /admin/users(.:format)                 {:action=>"create", :controller=>"admin/users"}
      new_admin_user GET        /admin/users/new(.:format)             {:action=>"new", :controller=>"admin/users"}
     edit_admin_user GET        /admin/users/:id/edit(.:format)        {:action=>"edit", :controller=>"admin/users"}
          admin_user GET        /admin/users/:id(.:format)             {:action=>"show", :controller=>"admin/users"}
                     PUT        /admin/users/:id(.:format)             {:action=>"update", :controller=>"admin/users"}
                     DELETE     /admin/users/:id(.:format)             {:action=>"destroy", :controller=>"admin/users"}
      admin_comments GET        /admin/comments(.:format)              {:action=>"index", :controller=>"admin/comments"}
                     POST       /admin/comments(.:format)              {:action=>"create", :controller=>"admin/comments"}
   new_admin_comment GET        /admin/comments/new(.:format)          {:action=>"new", :controller=>"admin/comments"}
  edit_admin_comment GET        /admin/comments/:id/edit(.:format)     {:action=>"edit", :controller=>"admin/comments"}
       admin_comment GET        /admin/comments/:id(.:format)          {:action=>"show", :controller=>"admin/comments"}
                     PUT        /admin/comments/:id(.:format)          {:action=>"update", :controller=>"admin/comments"}
                     DELETE     /admin/comments/:id(.:format)          {:action=>"destroy", :controller=>"admin/comments"}
    new_user_session GET        /admin/login(.:format)                 {:action=>"new", :controller=>"active_admin/devise/sessions"}
        user_session POST       /admin/login(.:format)                 {:action=>"create", :controller=>"active_admin/devise/sessions"}
destroy_user_session DELETE|GET /admin/logout(.:format)                {:action=>"destroy", :controller=>"active_admin/devise/sessions"}
       user_password POST       /admin/password(.:format)              {:action=>"create", :controller=>"active_admin/devise/passwords"}
   new_user_password GET        /admin/password/new(.:format)          {:action=>"new", :controller=>"active_admin/devise/passwords"}
  edit_user_password GET        /admin/password/edit(.:format)         {:action=>"edit", :controller=>"active_admin/devise/passwords"}
                     PUT        /admin/password(.:format)              {:action=>"update", :controller=>"active_admin/devise/passwords"}
                root            /                                      {:controller=>"codes", :action=>"list"}
                                /:controller(/:action(/:id(.:format)))

我检查了旧版本,路线是:

        new_user_session GET    /users/sign_in(.:format)               {:action=>"new", :controller=>"devise/sessions"}
            user_session POST   /users/sign_in(.:format)               {:action=>"create", :controller=>"devise/sessions"}
    destroy_user_session DELETE /users/sign_out(.:format)              {:action=>"destroy", :controller=>"devise/sessions"}
           user_password POST   /users/password(.:format)              {:action=>"create", :controller=>"devise/passwords"}
       new_user_password GET    /users/password/new(.:format)          {:action=>"new", :controller=>"devise/passwords"}
      edit_user_password GET    /users/password/edit(.:format)         {:action=>"edit", :controller=>"devise/passwords"}
                         PUT    /users/password(.:format)              {:action=>"update", :controller=>"devise/passwords"}
cancel_user_registration GET    /users/cancel(.:format)                {:action=>"cancel", :controller=>"devise/registrations"}
       user_registration POST   /users(.:format)                       {:action=>"create", :controller=>"devise/registrations"}
   new_user_registration GET    /users/sign_up(.:format)               {:action=>"new", :controller=>"devise/registrations"}
  edit_user_registration GET    /users/edit(.:format)                  {:action=>"edit", :controller=>"devise/registrations"}
                         PUT    /users(.:format)                       {:action=>"update", :controller=>"devise/registrations"}
                         DELETE /users(.:format)                       {:action=>"destroy", :controller=>"devise/registrations"}

【问题讨论】:

  • 运行'rake routes'并列出输出。

标签: ruby-on-rails ruby devise activeadmin


【解决方案1】:

您可能缺少的一件事是将您的用户模型声明为“可注册”以获取由 Devise 生成的注册路由。

你应该有这样的东西:

class User < ActiveRecord::Base
  # Include devise modules
  devise :database_authenticatable, :registerable, ...

我曾经遇到过这个问题,这就是解决它的方法。

【讨论】:

  • 我认为 activeadmin 安装程序会更新您指定的模型,在您的情况下它是 User 并且必须删除:registerable。按照这里的建议重新添加它为我解决了这个问题。
【解决方案2】:

您似乎对普通用户和管理员用户使用相同的模型。 ActiveAdmin 需要一个单独的管理员模型。尝试恢复生成器所做的更改,然后运行:

rails generate active_admin:resource AdminUser
rake db:migrate

这将创建一个AdminUser 模型,该模型与您网站的用户完全没有链接。

【讨论】:

  • 问题是AA不需要单独的型号(我可以选择AA安装的任何型号)。我想使用相同的模型。
  • 鉴于上述评论,您为什么将答案标记为正确?正如您所说,Active Admin 在其文档中明确声明不需要单独的模型
【解决方案3】:

在 routes.rb 中,指定 devise_for :users 这将恢复设计用户的路线

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-29
    • 1970-01-01
    • 2019-02-26
    • 2012-06-23
    • 2018-09-23
    • 2015-05-31
    • 1970-01-01
    相关资源
    最近更新 更多