添加新控制器会在 Rails 中带来新的 Devise 身份验证错误

Adding a New Controller Brings a new Devise Authentication Error in Rails

我正在开发一个 Rails 应用程序,我与另一位初级开发人员共同编码。

我想为应用程序添加静态主页和静态帮助页面。

按照 Hartl 的说明 (https://www.railstutorial.org/book/static_pages#cha-static_pages),我为主页和帮助页面的应用程序添加了一个静态页面控制器。当我导航到 static_pages/home 时出现此错误:

NameError in Static_pages#home

Showing /vagrant/src/statuscaster2/app/views/layouts/application.html.erb where line #34 raised:

undefined local variable or method `devise_mapping' for #<#<Class:0xb9d6860c>:0xb9d7ad34>
Extracted source (around line #34):

31:           <% if user_signed_in? %>
32:             <%= link_to 'Sign Out', destroy_user_session_path, :method => :delete %>
33:           <% else %>
34:             <%- if devise_mapping.registerable? && controller_name != 'registrations' %>
35:               <%= link_to "Sign up", new_registration_path(resource_name) %>
36:             <% end -%>
37:           <% end %>

Devise 不开心。第 31 行询问应用程序访问者是否已登录,如果用户已注册则尝试将其注销。第 33 行向访问者发送注册机会。

我不知道如何处理这个问题,非常感谢 SO 社区的帮助。

在 froderik 的帮助下(参见有问题的评论)我已经弄明白了。

我以错误的方式思考问题,试图责怪 devise,而它只是按照它的指示去做。默认情况下,我的新静态页面使用应用程序布局。这加载了我的应用程序的导航栏。该导航栏充满了设计身份验证逻辑。

通过为静态页面创建一个新布局,然后告诉我的静态页面控制器使用该布局,我能够解决我的问题。

关于此 post 的第一个答案提供了 additional/related 信息。

Rails specify layout for static pages