簡體   English   中英

當一個字段可能為零時,驗證兩個字段之一的存在

[英]Validate the presence of one of two fields when one might be zero

我只是遇到一種情況,即只有當另一個字段為空時,才可以接受用於驗證字段存在的解決方案-Rails尚未完成。

我希望同時顯示兩個字段中的一個或兩個,但是在我的情況下,一個字段的points必須為0到10之間的一個數字。在points字段為零的情況下:points? 評估為假,空白評論被認為是無效的。 我試圖通過指定:points.blank?使其更加具體:points.blank?

validates :comment, presence: { unless: :points.blank?, on: :create }
validates :points, presence: { unless: :comment?, on: :create }, 
                   numericality: { only_integer: true, allow_nil: true, less_than_or_equal_to: 10, greater_than_or_equal_to: 0 }

這似乎可行(我可以用0點保存第一個條目並且不加注釋),但是在隨后的保存中,我從控制器中收到了奇怪的錯誤:

NoMethodError(針對false:FalseClass的未定義方法“ validate”):app / controllers / comments_controller.rb:8:in'create'

驗證還有其他需要做的事情嗎? 我是否需要使用lambda(如對鏈接問題的某些答案所建議)?

:points.blank? 的計算結果為false ,它被設置為:unless哈希中的鍵的值。 您將需要指定方法名稱或Proc才能使:unless選項起作用。 您可以簡化整個設置:

validates :comment, presence: true, on: :create, if: :points?
validates :points, numericality: :only_integer, inclusion: 0..10

不知道如何獲得第一條記錄,但這不是正確的語法:

驗證:comment,狀態:{除非::points.blank ?,在以下位置::create}

相反,您應該在模型中定義如下方法:

def points_blank?
  # your code for zero handling
  # 
end

然后使用該方法,除非這樣:

validates :comment, presence: { unless: :points_blank?, on: :create }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM