gpt4 book ai didi

ruby-on-rails - Rails 3自定义格式验证错误?

转载 作者:行者123 更新时间:2023-12-04 05:49:07 25 4
gpt4 key购买 nike

使用此模型:

validates_presence_of :email, :message => "We need your email address"

作为一个相当人为的例子。错误出现为:

Email We need your email address

我如何自己提供格式?

我查看了 ActiveModel::Errors#full_messages 的源代码,它是这样做的:

def full_messages
full_messages = []

each do |attribute, messages|
messages = Array.wrap(messages)
next if messages.empty?

if attribute == :base
messages.each {|m| full_messages << m }
else
attr_name = attribute.to_s.gsub('.', '_').humanize
attr_name = @base.class.human_attribute_name(attribute, :default => attr_name)
options = { :default => "%{attribute} %{message}", :attribute => attr_name }

messages.each do |m|
full_messages << I18n.t(:"errors.format", options.merge(:message => m))
end
end
end

full_messages
end

注意到选项中的 :default 格式字符串了吗?所以我尝试了:

validates_presence_of :email, :message => "We need your email address", :default => "something"

但随后错误信息实际上显示为:

Email something

然后我尝试包含插值字符串 %{message},从而覆盖 Rails 默认使用的 %{attribute} %{message} 版本。这会导致异常:

I18n::MissingInterpolationArgument in SubscriptionsController#create

missing interpolation argument in "%{message}" ({:model=>"Subscription", :attribute=>"Email", :value=>""} given

但如果我使用插值字符串%{attribute},它不会出错,它只是两次吐出人性化的属性名称。

有人有这方面的经验吗?我总是可以先有属性名称,但通常我们需要一些其他字符串(营销人员总是让事情变得更复杂!)。

最佳答案

:base 上的错误并不特定于任何属性,因此人性化的属性名称不会附加到消息中。这允许我们添加有关电子邮件的错误消息,但不将它们附加到电子邮件属性,并获得预期的结果:

class User < ActiveRecord::Base
validate :email_with_custom_message
...
private

def email_with_custom_message
errors.add(:base, "We need your email address") if
email.blank?
end
end

关于ruby-on-rails - Rails 3自定义格式验证错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6086528/

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