Devise 4.1和Rails 5.0.0.rc1中未定义的局部变量资源

时间:2016-05-26 05:25:44

标签: ruby-on-rails devise ruby-on-rails-5

我只是将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]

导致这种情况的原因是什么?

1 个答案:

答案 0 :(得分:0)

当使用5.0.0.rc1设置Device时,除了

之外,没有任何版本可用于我
gem "devise", '~> 4.0.0.rc1'

尝试更改宝石并再次捆绑

编辑和最终解决方案

Helper方法通常只在控制器内部调用,所以转到你的根我想你去另一个控制器。将此添加到您的应用程序助手

def resource_name
 :user
end

def resource
 @resource ||= User.new
end

def devise_mapping
 @devise_mapping ||= Devise.mappings[:user]
end