我正在使用Rails版本3. 我想創建一個模型,其中我有一個名爲「Page-visits」的字段,我希望它將範圍保存爲值,例如:(50 .. 100),(1000 .. 5000)等。如何做到這一點? 即使在rails中沒有這樣的數據類型,我想知道如何實現它的其他方法?如何在Rails模型創建中使用Range數據類型?
3
A
回答
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_start
和range_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範圍對象(儘管如此,爲什麼不呢?)。
在序列化的情況下,應該/我們可以使用'serialize:range_column,Range'還是我誤解了該參數的使用目的? – Ziggy 2013-03-28 20:50:39