Devise局部未渲染

问题描述 投票:0回答:1

以下操作正在调用本地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) %>

设计的功能如何恢复到预期的设计?

ruby-on-rails devise
1个回答
0
投票
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

© www.soinside.com 2019 - 2024. All rights reserved.