2012-09-06 56 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