2014-09-04 42 views
0

我的Rails應用程序中有一個Player模型和表。有一個字段highest_level(int),用於存儲玩家達到的最高等級。由於每個玩家有多個配置文件,有些情況下報告的級別可能會低於數據庫中的最高級別。Rails 4驗證:greater_than:less_than更新

我做了一些關於validates和validates_numericality_of的研究,看來我可以分別使用:greater_than或:less_than來滿足我的需求。

在我的球員模型

我嘗試這樣做:

class Player < ActiveRecord::Base 
    validates_numericality_of :highestLevel, greater_than: self.highestLevel 
end 

但是,執行最高水平值的更新,無論大或小的更新:

Player.update(8, highestLevel: 12) 

我所希望得到的是沒有更新,因爲我的玩家ID 8的值是最高等級15.有沒有人有他們可以發佈或指向我的示例?

非常感謝!

回答

0

您的highestLevel作用域記錄的屬性將不會按照您編寫的代碼進行評估。

您可以使用Proc訪問範圍的記錄的值:

validates_numericality_of :highestLevel, greater_than: Proc.new { |r| r.highestLevel_was } 
+0

我給你的榜樣旋轉,但我發現同樣的事情之前 - 在highestLevel值更新,不管它是大還是小比存儲的值。我使用Ruby 2.1運行rails 4.1.4。根據文件,這應該不會有所作爲。 – 2014-09-04 17:55:04

+0

看看更新的答案,使用'highestLevel_was' – RAJ 2014-09-04 18:12:18

+0

我也給了一個旋轉,但同樣的結果 – 2014-09-04 18:58:14