我的问题是,如何让设备错误消息像其他使用 flash.each 的设备一样工作? 谢谢。 最佳答案-6ren">
gpt4 book ai didi

ruby-on-rails - Rails - 设计 - 处理 - devise_error_messages

转载 作者:行者123 更新时间:2023-12-03 04:32:30 24 4
gpt4 key购买 nike

在我的用户编辑页面中,有一行如下:

<%= devise_error_messages! %>

问题是这不会像应用程序其余部分那样输出错误:

<% flash.each do |key, value| %>
<div class="flash <%= key %>"><%= value %></div>
<% end %>

我的问题是,如何让设备错误消息像其他使用 flash.each 的设备一样工作?

谢谢。

最佳答案

我正在尝试自己解决这个问题。我刚刚在Github上发现这个问题https://github.com/plataformatec/devise/issues/issue/504/#comment_574788

Jose 说 devise_error_messsages! 方法只是一个 stub (尽管它包含实现),我们应该覆盖/替换它。如果在 wiki 的某个地方指出这一点就好了,这就是为什么我猜有一些像我们一样的人一直在猜测。

所以我将尝试重新打开模块并重新定义方法,从而有效地覆盖默认实现。我会让你知道进展如何。

更新

是的,这有效。我创建了 app/helpers/devise_helper.rb 并像这样覆盖它:

module DeviseHelper
def devise_error_messages!
'KABOOM!'
end
end

知道了这一点,我就可以修改该方法以按照我想要的方式显示错误消息。

为了帮助您解决原来的问题:这是原来的devise_helper.rb on Github 。看一下错误消息是如何遍历的:

messages = resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join

这应该可以帮助您入门。 :)

另一个更新

resource对象实际上是devise正在使用的模型(见图)。

resource.class         #=> User
resource.errors.class #=> ActiveModel::Error

它似乎也是在更高的范围内定义的(可能来自 Controller ),因此可以在多个地方访问它。

助手中的任何位置

module DeviseHelper
def devise_error_messages1!
resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join
end

def devise_error_messages2!
resource.errors.full_messages.map { |msg| content_tag(:p, msg) }.join
end
end

你的看法

<div><%= resource.errors.inspect %></div>

关于ruby-on-rails - Rails - 设计 - 处理 - devise_error_messages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4101641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com