2016-10-03 47 views
0

這個問題與this one類似,但這些答案不適用於我(可能是他們已棄用)。我不想重新開放賞金,因爲我有一些不同的觀點。在我來說,我有一個像這樣 allowed_values = [99.50..200]一個數組,我試着用:rails在模型中驗證值是在數組[2]

class Thing < ActiveRecord::Base 
    validates :price, :inclusion=> { :in => allowed_values } 

它不工作。我已經通過驗證here的例子嘗試了很多方法。我在編碼欄上幾乎沒有經驗。所以,請幫助找到解決方案。

更多信息:

 ruby version: ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux] 
     rails version: Rails 4.1.5 
+0

'price'數據類型是否爲'Float/Integer'?如果它是'String'則不起作用。 –

回答

1

問題必須與您通過allowed_values陣列的方式。

你可以用這個去:

validates :price, inclusion: { in: (99.50..200) } 

或者,與一個常數:

ALLOWED_VALUES = (99.50..200).freeze 
validates :price, inclusion: { in: ALLOWED_VALUES } 
+0

它不起作用。它依賴於Ruby或Rails的版本嗎?! –

+0

@ Ulug'bekRo'zimboyev你使用哪個版本?這種方式不起作用?你會得到什麼錯誤? –

+0

我編輯的問題 –

1

[99.50..200]是包含單一元素的數組:範圍(99.50。 0.200)。

您正在測試值是否在數組中的對象列表中,但您可能需要的是測試它是否在範圍內。

所以定義:的

allowed_values = (99.50..200) 

代替:

allowed_values = [99.50..200] 
0

我已經找到了解決辦法:How to implement min/max validator in Rails 3?

validates :price, :inclusion=> { :in => allowed_values } 

不起作用,似乎驗證風格是後改變3版本的導軌。我試着用:

validates_inclusion_of :number, :in => min_price..max_price 

這個解決方案沒有有效的情況下,如果min_price=10.5 and max_price=11

我的解決辦法是:

validates :price, :numericality => { :greater_than_or_equal_to => min_price, :less_than_or_equal_to => :max_price } 

我不知道紅寶石(和軌道)深和我我有些情況是不正確的。但此解決方案正在工作