2009-12-12 16 views
0

我创建了具有两个属性名称和值的变量模型,用于在我的网站中保存任何选项。我想知道的是,我是否需要像serialize这样的特殊方法来让rails在读取之后或写入db之前识别数据类型?我需要使用任何特殊的方法来使轨道识别db中的数据类型吗?

我尝试没有serialize:值,但只有数据类型工作是阵列哈希和字符串其他人不。 和每件事情都很好,但它确实是吗?如果是的话,为什么轨道有这种方法 serialize

这是我的代码存储在所述数据库中的对象作为一个ActiveRecord模型的属性时,才需要

class CreateVariables < ActiveRecord::Migration 
    def self.up 
    create_table :variables do |t| 
     t.string :name 
     t.text :value 

     t.timestamps 
    end 

    add_index :variables, :name, :unique => true 
    end 

    def self.down 
    drop_table :variables 
    end 
end 

class Variable < ActiveRecord::Base 


    validates_uniqueness_of :name 
    validates_presence_of :name, :value 

end 

回答

0
序列化

从您对变量表的模糊描述中,序列化不应该是必需的。 如果将属性很好地存储到任何标准数据库列类型(例如String,Fixnum,Boolean或其任何子类)中,则不需要序列化属性。如果名称/值对中的值比这更复杂,则需要序列化。例如,数组中的值,哈希和自定义对象将需要序列化。

一旦使用serialize方法指定,就不必做任何事情。

+0

从我尝试,我不能检索int和float作为它的类型。使用Variable.create(:name =>'int',:value => 123)和Variable.find_by_name('int')。value。它返回“123”不是123.之后,我尝试了序列化:值,但没有任何工作既复杂,也不复杂 – sarunw 2009-12-13 09:10:09

+0

问题是你的数据库字段不是数字类型(整数/十进制/浮点数/等)。如果你没有处理数据结构,序列化不会做任何事情。你也可以考虑为ActiveRecord :: Base#Serialzie提供一个对象参数,这样事物总是以相同的方式解释。 – EmFi 2009-12-14 05:35:47

+0

我使用数据库字段作为文本,目的是将它用作变量保存器,无论是int,float,string,array,hash。起初我认为序列化会像在PHP中序列化和反序列化,但不是。我曾试过元帅,但sqlite显示错误“无法识别的令牌”。不知道该怎么做。 – sarunw 2009-12-14 08:23:48

相关问题