2010-10-16 179 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

相关问题