仅当表单字段具有值时,Rails验证才会更新

时间:2017-02-03 14:03:25

标签: ruby-on-rails validation

如果提交的表单字段有值,如何在更新时验证rails app?

不应验证提交的表单字段是否为空。

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

2 个答案:

答案 0 :(得分:1)

<强>更新

如果条形码已更改,则应在 before_validation 回调中触发 search_card 方法:

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

旧答案(错误)

您应该在 Proc 中使用 if 语句。试试这个:

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

答案 1 :(得分:0)

您可以使用客户端验证。有关详细信息,请参阅https://github.com/DavyJonesLocker/client_side_validations。另外,使用callback(before_create)验证值。