Ruby on rails Rails设计注册表单未定义方法“设计错误消息!”';

Ruby on rails Rails设计注册表单未定义方法“设计错误消息!”';,ruby-on-rails,ruby,devise,Ruby On Rails,Ruby,Devise,我正在尝试使用Desive来处理用户登录/注册/忘记密码 我想在我的根url根“home#index”上注册表格 HomeController class HomeController < ApplicationController include DeviseHelper def index end end module DeviseHelper def resource_name :user end def

我正在尝试使用Desive来处理用户登录/注册/忘记密码

我想在我的根url根“home#index”上注册表格

HomeController

class HomeController < ApplicationController

    include DeviseHelper

    def index

    end

end
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
views/home/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>


(最少字符)

当我尝试使用错误的属性注册时,它会显示此错误

未定义的方法“设计错误消息!”为了#


如何修复此错误。使用设计模块也是一个好的实践吗?

只需添加一个
设计错误消息的实现到您的
设备帮助器
。您可以从中借用实现。

在您的
app/helpers/designe\u helper.rb
文件中,添加
designe\u错误消息方法如下:

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
模块设备帮助器
def设计错误消息!
如果resource.errors.empty为空,则返回“”?
messages=resource.errors.full_messages.map{| msg | content_标记(:li,msg)}.join

html=最好的选择是将您自己的设备帮助重命名为其他名称。Rails的自动加载是查找DesiveHelper的实现,而不是Desive的实现,因此没有加载该方法。称之为不太具体的东西,例如AuthHelper


与拉入您自己的实现相比,这种方法的优点是可以设计错误消息!您将自动获取Desive可能在未来版本中对方法所做的更改,并且您的应用程序中的代码将更少,这两方面都使您的代码更合理/更易于维护。

谢谢,伙计,当有人指出如何使代码对其他程序员更友好、更易于维护时,我总是很感激。