2012-09-06 55 views
0

在我目前的ROR项目中,我使用了设计插件进行验证。在我更改密码表单验证,我使用的user模型验证在轨道上的红宝石中的某个动作

validates_presence_of :password, :password_confirmation 

下面的代码,但我想要验证只有一个动作。我在我的用户控制器update_password中有一个功能。我发现我可以分配的动作如下:

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

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

非常感谢

+0

':on'选项接受值':create'或':update',没有':update_password' – tight

+0

所以我怎么能设置'update_password'它 – Mujahid

+0

':on'选项不适用于“控制器上下文”,而是“对模型的操作”。您可以设置一个实例变量来设置控制器的上下文,并用':if'选项进行测试 – tight

回答

0

如果你使用的设计,没有必要以检查。它默认为你处理。

+0

谢谢,但我该如何配置?我已启用validatable,但它不起作用。以下是我已经添加了“的方式EM'\t设计\t:database_authenticatable, \t:rememberable,\t \t \t:可追踪,\t \t \t:可验证的,\t \t \t \t :recoverable' – Mujahid

+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[^@][email protected][^@]+\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