验证在轨道上的红宝石中的某个动作

时间:2012-09-06 11:59:32

标签: ruby-on-rails ruby-on-rails-3 devise passwords

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

validates_presence_of :password, :password_confirmation

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

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

但它不起作用。即使密码和密码确认字段为空,也会提交表单。任何人都可以帮我解决如何仅为特定操作设置验证。将是一个很大的帮助

非常感谢

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果您正在使用设计,则无需检查。它默认为你处理。