0

在我目前的 ROR 项目中,我使用设计连接进行验证。在我的更改密码表单验证中,我在user模型中使用以下代码

validates_presence_of :password, :password_confirmation

但我想验证只是为了一个动作。我的用户控制器中有一个名为update_password. 我发现我可以按如下方式分配操作:

validates_presence_of :password, :password_confirmation, :on => :update_password

但它不起作用。即使密码和密码确认字段为空,也会提交表单。谁能帮我解决如何仅为特定操作设置验证。会有很大帮助

非常感谢

4

2 回答 2

2

您可以使用设计中实现的 :validatable 选项。只需添加到您的模型中

devise :validatable

config/initializers/devise.rb并在您的文件中设置验证选项

# ==> Configuration for :validatable
# Range for password length. Default is 6..128.
config.password_length = 6..128

# Email regex used to validate email formats. It simply asserts that
# an one (and only one) @ exists in the given string. This is mainly
# to give user feedback and not to assert the e-mail validity.
config.email_regexp = /\A[^@]+@[^@]+\z/

另一种方法是使用您自己的正则表达式验证。您可以添加到您的模型

validates :password, :format => { :with => /\A[a-zA-Z]+\z/, :message => "Only letters allowed" }

之后你可以调用@user.valid? 在您的控制器中检查您的用户实例是否正确。

有许多不同的方法可以验证您的模型。您可以在指南中阅读有关验证和 ActiveRecord 回调的更多信息:http: //guides.rubyonrails.org/active_record_validations_callbacks.html

于 2012-09-06T12:25:20.040 回答
0

如果您使用的是设计,则无需检查。默认情况下它会为您处理。

于 2012-09-06T12:02:16.117 回答