我正在创建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
有人可以帮我解决这个问题。这个结果可能是什么原因?
答案 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;方法调用,它可能会转到引擎或应用程序的根目录,具体取决于它的调用位置。