【问题标题】:Rails Validation on update only if form field has value仅当表单字段具有值时,Rails 验证更新
【发布时间】:2017-02-04 21:13:38
【问题描述】:

仅当提交的表单字段具有值时,如何在更新时验证 Rails 应用程序?

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

用户.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

【问题讨论】:

标签: ruby-on-rails validation


【解决方案1】:

更新

如果 barcode 已更改,您应该在 before_validation 回调上触发 search_card 方法:

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

旧答案(错误)

您应该将 if 语句与 Proc 一起使用。试试这个:

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

【讨论】:

  • 它没有用。我的情况有点不同。有两种形式,一种是更新用户资料,另一种是只更新条形码。因此,当更新请求是编辑用户配置文件表单时,它应该在没有验证的情况下更新,当更新请求是更新条形码时,它应该使用上述表达式进行验证。
  • @SantoshAryal 抱歉,我的第一个答案完全错误。我做了一些更新,所以你可以试试新的。
  • 感谢 pan.goth 我使用了您的建议,但它允许在不验证卡型号的条形码的情况下更新条形码。
  • @SantoshAryal 你能告诉我你更新后的代码部分吗?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 2020-04-26
    • 2019-03-18
    • 2020-08-18
    • 1970-01-01
    相关资源
    最近更新 更多