以下操作正在调用本地Devise(v4.4.3)注册控制器
Started GET "/users/sign_up" for ::1 at 2020-03-25 11:34:04 +0100
Processing by RegistrationsController#new as HTML
Rendered devise/shared/_links.erb (0.4ms)
Rendered devise/registrations/new.html.erb within layouts/application (6.8ms)
Rendered devise/sessions/_session_form.html.erb (2.5ms)
Rendered layouts/shared/_help.html.erb (3.3ms)
但是,在日志Rendered devise/registrations/new.html.erb within layouts/application
中显示的部分不是实际呈现的内容,返回的是前一页的内容。 Started GET "/users/sign_in"
应用程序路由devise_for :users, :controllers => { registrations: 'registrations' }
。由于这些功能以前运行正常,所以引入了此错误(以某种方式!)。 RegistrationsController仅具有:
class RegistrationsController < Devise::RegistrationsController
private
def sign_up_params
def account_update_params
end
古怪之处还在于,上一页(主页)具有部分内容:
<%= render 'devise/sessions/session_form' %>
正在渲染哪个([is(它使用form_for(:user, :url => session_path(:user)) do |f|
而不是调用:resource
),因为正在对其进行更改(因此删除了所有缓存注意事项)。
<%= render "devise/shared/links" %>
,名称错误出现在undefined local variable or method 'resource_name'
的<%= link_to t('.sign_in'), new_session_path(resource_name) %>
中设计的功能如何恢复到预期的设计?
undefined local variable or method 'resource_name'
是因为您尝试渲染部分设计而不经过设计控制器。Devise局部变量使用一种抽象的方式来生成表单动作或链接。并且由于可以将devise用于所需的任何模型,因此devise使用方法resource_name
来处理此问题。
因此,如果要在devise控制器外部渲染局部devise/shared/links
,则应使用符号将用其插入devise的模型替换dev局部中的resource_name
方法。例如,如果在模型User
上使用devise,则将devise视图中的resource_name
替换为:user