2015-09-18 46 views
2

我試圖使用設計用於處理用戶登錄/註冊/已忘記的密碼Rails設計註冊形式未定義的方法`devise_error_messages!'

我希望有我的根URL根的家#指數「

HomeController的報名表格

class HomeController < ApplicationController 

    include DeviseHelper 

    def index 

    end 

end 

DeviceHelper

module DeviseHelper 
    def resource_name 
     :user 
    end 

    def resource_class 
     User 
    end 

    def resource 
     @resource ||= User.new 
    end 

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

end 

的意見/家庭/ index.html.erb

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> 

<%= devise_error_messages! %> 

<div class="field"> 
    <%= f.label :email %><br /> 
    <%= f.email_field :email, autofocus: true %> 
</div> 

<div class="field"> 
    <%= f.label :password %> 
    <% if @minimum_password_length %> 
    <em>(<%= @minimum_password_length %> characters minimum)</em> 
    <% end %><br /> 
    <%= f.password_field :password, autocomplete: "off" %> 
</div> 

<div class="field"> 
    <%= f.label :password_confirmation %><br /> 
    <%= f.password_field :password_confirmation, autocomplete: "off" %> 
</div> 

<div class="actions"> 
    <%= f.submit "Sign up" %> 
</div> 

當我嘗試與錯誤的屬性,它表明我這個錯誤

未定義的方法`devise_error_messages註冊!爲#<#:0x007fb430638300>

我該如何解決這個錯誤。也正在使用Devise模塊的良好做法?

回答

3

最好的選擇是將您自己的DeviseHelper重命名爲其他名稱。 Rails的自動加載是找到DeviseHelper而不是Devise的實現,所以這個方法沒有被加載。稱之爲不太具體的東西,例如化AuthHelper。

這個過度拉動你自己的實現的好處是做了devise_error_messages!你會自動選擇Devise在未來版本中所做的更改,以及你的應用程序中的代碼更少,從而使代碼更加合理/可維護。

+1

謝謝,我總是很欣賞有人指出如何讓代碼對其他程序員更友好,更易於維護。 –

0

只需添加的devise_error_messages!實現你的DeviseHelper。您可以借用Devise wiki的實施。

0

在你app/helpers/devise_helper.rb文件,添加devise_error_messages!方法是這樣的:

module DeviseHelper 
    def devise_error_messages! 
    return '' if resource.errors.empty? 

    messages = resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join 
    html = <<-HTML 
    <div class="alert alert-error alert-danger"> <button type="button" 
    class="close" data-dismiss="alert">x</button> 
     #{messages} 
    </div> 
    HTML 

    html.html_safe 
    end 
end 

附:我已經在我的一個項目中有這個,它工作正常。

相關問題