Devise 4.1 和 Rails 5.0.0.rc1 中未定义的局部变量资源
undefined local variable resource in Devise 4.1 and Rails 5.0.0.rc1
我正在将 Devise 4.1 安装到我的 Rails 5.0.0.rc1 项目中。
在我的 application.html.erb
中,我有这个错误消息助手:
<%= devise_error_messages! %>
我已经用this boilerplate helper覆盖了它:
module DeviseHelper
def devise_error_messages!
return "" unless devise_error_messages?
messages = resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join
sentence = I18n.t("errors.messages.not_saved",
:count => resource.errors.count,
:resource => resource.class.model_name.human.downcase)
html = <<-HTML
<div id="error_explanation">
<h2>#{sentence}</h2>
<ul>#{messages}</ul>
</div>
HTML
html.html_safe
end
def devise_error_messages?
!resource.errors.empty?
end
end
然而,当我重新加载我的网站并转到我的 root_page
时,我收到此错误:
NameError at /
undefined local variable or method `resource' for #<#<Class:0x007f8105dc24f8>:0x007f8105db73f0>
错误发生在我的app/helpers/devise_helper.rb
中的这一行
def devise_error_messages?
!resource.errors.empty?
end
在我的控制器中我添加了:
before_action :authenticate_user!, except: [:index, :show]
可能是什么原因造成的?
使用 5.0.0.rc1 设置设备时,除
外,没有其他版本适合我
gem "devise", '~> 4.0.0.rc1'
尝试更改 gem 并再次捆绑
编辑和最终解决方案
Helper 方法通常只在控制器内部调用,所以通过转到根目录,我猜你会转到另一个控制器。将此添加到您的应用程序助手
def resource_name
:user
end
def resource
@resource ||= User.new
end
def devise_mapping
@devise_mapping ||= Devise.mappings[:user]
end
我正在将 Devise 4.1 安装到我的 Rails 5.0.0.rc1 项目中。
在我的 application.html.erb
中,我有这个错误消息助手:
<%= devise_error_messages! %>
我已经用this boilerplate helper覆盖了它:
module DeviseHelper
def devise_error_messages!
return "" unless devise_error_messages?
messages = resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join
sentence = I18n.t("errors.messages.not_saved",
:count => resource.errors.count,
:resource => resource.class.model_name.human.downcase)
html = <<-HTML
<div id="error_explanation">
<h2>#{sentence}</h2>
<ul>#{messages}</ul>
</div>
HTML
html.html_safe
end
def devise_error_messages?
!resource.errors.empty?
end
end
然而,当我重新加载我的网站并转到我的 root_page
时,我收到此错误:
NameError at /
undefined local variable or method `resource' for #<#<Class:0x007f8105dc24f8>:0x007f8105db73f0>
错误发生在我的app/helpers/devise_helper.rb
def devise_error_messages?
!resource.errors.empty?
end
在我的控制器中我添加了:
before_action :authenticate_user!, except: [:index, :show]
可能是什么原因造成的?
使用 5.0.0.rc1 设置设备时,除
外,没有其他版本适合我gem "devise", '~> 4.0.0.rc1'
尝试更改 gem 并再次捆绑
编辑和最终解决方案
Helper 方法通常只在控制器内部调用,所以通过转到根目录,我猜你会转到另一个控制器。将此添加到您的应用程序助手
def resource_name
:user
end
def resource
@resource ||= User.new
end
def devise_mapping
@devise_mapping ||= Devise.mappings[:user]
end