gpt4 book ai didi

ruby-on-rails - rails 上的 ruby 。自定义验证器方法中的自定义消息

转载 作者:数据小太阳 更新时间:2023-10-29 08:29:19 27 4
gpt4 key购买 nike

我希望能够在模型验证器方法中设置自定义消息,以通知用户输入数据不正确。

首先,我设置了一个自定义验证器类,我在其中重新定义了 validate_each那样的方法recommended in rails' documentation :


# app/models/user.rb

# a custom validator class
class IsNotReservedValidator < ActiveModel::EachValidator
RESERVED = [
'admin',
'superuser'
]

def validate_each(record, attribute, value)
if RESERVED.include? value
record.errors[attribute] <<
# options[:message] assigns a custom notification
options[:message] || 'unfortunately, the name is reserved'
end
end
end

其次,我尝试将自定义消息传递给 validates两种不同的方法:


# a user model
class User < ActiveRecord::Base
include ActiveModel::Validations

ERRORS = []

begin
validates :name,
:is_not_reserved => true,
# 1st try to set a custom message
:options => { :message => 'sorry, but the name is not valid' }
rescue => e
ERRORS << e
begin
validates :name,
:is_not_reserved => true,
# 2nd try to set a custom message
:message => 'sorry, but the name is not valid'
rescue => e
ERRORS << e
end
ensure
puts ERRORS
end
end

但这两种方法都不起作用:


>> user = User.new(:name => 'Shamaoke')
Unknown validator: 'options'
Unknown validator: 'message'

我可以在哪里以及如何为自定义验证器设置自定义消息?

谢谢。

Debian GNU/Linux 5.0.6;

ruby 1.9.2;

Ruby on Rails 3.0.0。

最佳答案

首先,不要包含ActiveModel::Validations,它已经包含在ActiveRecord::Base中。其次,您不使用 :options 键指定验证选项,而是使用验证器的键来指定。

class User < ActiveRecord::Base
validates :name,
:is_not_reserved => { :message => 'sorry, but the name is not valid' }
end

关于ruby-on-rails - rails 上的 ruby 。自定义验证器方法中的自定义消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3694367/

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