在带有引擎的rails应用程序中使用Devise

时间:2014-08-18 11:50:18

标签: ruby-on-rails ruby ruby-on-rails-4 devise

我正在创建rails应用程序,我将应用程序分成两个引擎。应用程序使用Devise gem进行用户注册和授权。 Devise gem连接在根应用程序中,管理员端位于其中一个引擎内。但是管理员端布局仍然在根应用程序中。如果我在管理布局中使用此代码<%= link_to edit_user_registration_path do %>,则会向我显示以下异常:

undefined local variable or method `edit_user_registration_path' 

/app/views/layouts/admin.html.erb

有人可以帮我解决这个问题。这个结果可能是什么原因?

2 个答案:

答案 0 :(得分:1)

我认为你已经搞砸了routes.rb ..让我给你一个暗示......

/admin/posts以及admin/posts#index<%= link_to admin_posts_path do %>工作,您的路线必须

  namespace :admin do
  resources :posts, :comments
end

但是对于像(只有url和helper / controller without admin )这样的东西来说

`/admin/posts`  and     `posts#index` and  `<%= link_to posts_path do %>`

然后......你的路线必须

  resources :posts, path: /admin/posts

所以你必须在路线中使用它(使用设计)

devise_for :users,:controllers => {:registrations => "users/devise/registrations"}

会给你: -

edit_user_registration GET /users/edit(.:format) users/devise/registrations#edit

我认为这应该对你有帮助。

答案 1 :(得分:0)

此外,如果您的引擎控制器引用了父布局,则必须指定帮助程序:

<%= link_to "Change password", main_app.edit_user_registration_path %>

以下是导轨指南中的确切说明:

或实例,如果该模板是从应用程序呈现的,则以下示例将转到应用程序的articles_path;如果引擎是从引擎呈现的,则转到引擎的articles_path:

<%= link_to "Blog articles", articles_path %>

要使此路由始终使用引擎的articles_path路由帮助方法,我们必须在与引擎共享同一名称的路由代理方法上调用该方法。

<%= link_to "Blog articles", blorgh.articles_path %>

如果您希望以类似的方式引用引擎内的应用程序,请使用main_app帮助程序:

<%= link_to "Home", main_app.root_path %>

如果您要在引擎内部使用它,它将始终转到应用程序的根目录。如果你要离开main_app&#34;路由代理&#34;方法调用,它可能会转到引擎或应用程序的根目录,具体取决于它的调用位置。