2017-02-03 61 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我用你的建议,但它允许更新条形码,而不验证卡模型的条形码。 –

相关问题