2017-02-03 96 views
-1

只有當提交的表單字段有值時,如何在更新時驗證rails應用程序?只有在表單字段有值的情況下,Rails才進行驗證

它不應驗證提交的表單域是否爲空。

User.rb

validates_presence_of :search_card, on: :update 

def search_card 
    card = Card.find_by_barcode(self.barcode) 
    if card.nil? 
     errors.add(:invalid_card, ", Please provide another card") 
    end 
    end 
+0

http://guides.rubyonrails.org/active_record_validations.html#allow-blank – Iceman

+0

它不工作!!!! –

+0

甚至沒有四個感嘆號? – Iceman

回答

0

您可以使用客戶端驗證它。欲瞭解更多詳情,請參閱https://github.com/DavyJonesLocker/client_side_validations。另外,使用callback(before_create)來驗證這些值。

0

更新

您應該before_validation回調火search_card方法,如果條碼已經改變:

before_validation :search_card, on: :update, if: Proc.new { |u| u.barcode_changed? } 

老答案(錯誤)

ÿ ou應該使用如果聲明與Proc。試試這個:

validates_presence_of :search_card, on: :update, if: Proc.new { |u| u.search_card.present? } 
+0

它沒有奏效。我的情況有點不同。有兩種形式,一種是更新用戶配置文件,另一種是僅更新條形碼。因此,當更新請求是編輯用戶配置文件表單時,它應該在沒有驗證的情況下進行更新,並且當更新請求要更新條形碼時,應該使用上述表達式進行驗證。 –

+0

@SantoshAryal對不起,我的第一個答案是完全錯誤的。我做了一些更新,所以你可以嘗試新的。 –

+0

謝謝pan.goth我用你的建議,但它允許更新條形碼,而不驗證卡模型的條形碼。 –

相關問題