2010-10-16 102 views
3

我正在使用Rails版本3. 我想創建一個模型,其中我有一個名爲「Page-visits」的字段,我希望它將範圍保存爲值,例如:(50 .. 100),(1000 .. 5000)等。如何做到這一點? 即使在rails中沒有這樣的數據類型,我想知道如何實現它的其他方法?如何在Rails模型創建中使用Range數據類型?

回答

1

我建議建立與屬性page_visits模型持有的訪問確切金額,然後在行動中定義的方法,像水木清華

def page_visit_range 
    #case when statement for self.page_visits or some smarter maths to return range 
end 
7

我假設你真的想存儲範圍在模型,而不是一個範圍內的值。 (如果你想要做後者,驗證就是你的答案)。

所以,範圍。在模型中。你有兩個選擇,每個都相當不錯。

選項1:創建一個類型爲「text」的列(range_column)。將Ruby範圍對象傳遞到列,如@my_model_object.range_column = (50..100)。告訴Rails系列化你的範圍是這樣的:

class MyModel < ActiveRecord::Base 
    serialize :range_column 
end 

現在,Rails會自動轉換至YAML數據庫存儲,並將其轉換回範圍對象時,它再次檢索記錄。沒有比這更容易!

選項2:創建兩個類型爲'integer'的列(range_startrange_end)。建立東西在你的模型是這樣的:

class MyModel < ActiveRecord::Base 
    def range=(rstart, rend) 
    self.range_start = rstart 
    self.range_end = rend 
    end 

    def range 
    (range_start..range_end) # or as an array, or however you want to return it 
    end 
end 

第一個選項是容易(在我看來,更好),而第二個給你更多的一個稍微有點彈性的開箱你不要案」不想使用Ruby範圍對象(儘管如此,爲什麼不呢?)。

+0

在序列化的情況下,應該/我們可以使用'serialize:range_column,Range'還是我誤解了該參數的使用目的? – Ziggy 2013-03-28 20:50:39