2016-05-26 11 views
0

私はDeviles 4.1を自分のRails 5.0.0.rc1プロジェクトにインストールしています。私application.html.erbDevits 4.1とRails 5.0.0.rc1で未定義のローカル変数リソース

、私はこのエラーメッセージのヘルパーを持っている:

<%= 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] 

これを引き起こしている可能性がありますか?

答えて

0

バージョンが宝石を変更して再度

を編集し、最終的なソリューションをバンドルしてみてください、私以外

gem "devise", '~> 4.0.0.rc1' 

のために働くんでしょう5.0.0.rc1でデバイスを設定する

ヘルパーメソッドは、通常、コントローラ内で呼び出されます。ルートに行くと、別のコントローラに移動すると思います。これをアプリケーションのヘルパーに追加してください

def resource_name 
:user 
end 

def resource 
@resource ||= User.new 
end 

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

良いアイデアですが、私はまだ同じエラーが発生しています。これがインストールされたバージョンは 'Installing devise 4.0.3(was 4.1.0)'でした。それ以降のバージョンでも動作しませんか?いずれにせよ、宝石を変更してもこのエラーは修正されません。 – marcamillion

+0

私のバンドルを確認して、はい4.0.3は私のために働いていますが、これは非常に似たような問題です[ここ](http://stackoverflow.com/questions/22232561/attribute-name-showing-on -devise-error) –

+0

私はその解決策を試みましたが、それは私のためには機能しませんでした。問題は 'リソース'にあり、残りのデイジーチェーン化されたメソッドではありません。 – marcamillion

関連する問題