Ruby on rails 新手:将序列化的整数追加到数据库列中并检索回来

Ruby on rails 新手:将序列化的整数追加到数据库列中并检索回来,ruby-on-rails,ruby-on-rails-3,serialization,activerecord,deserialization,Ruby On Rails,Ruby On Rails 3,Serialization,Activerecord,Deserialization,如何将序列化的整数(用户id从1到9999)存储在数据库列中并检索回来 在我的用户模型中,我有一个邀请栏 User model serialize: invites invites = text field 现在我试着做两件事: 在“邀请”列中追加序列化的用户id整数(从1到9999) 从user.invested列中检索所有用户id(反序列化它?) 来自: 序列化(属性名称,类名称=对象) 如果有一个属性需要作为对象保存到数据库中,并作为同一对象检索,则使用此方法指定该属性的名称,该属性将

如何将序列化的整数(用户id从1到9999)存储在数据库列中并检索回来

在我的用户模型中,我有一个邀请栏

User model
serialize: invites
invites = text field
现在我试着做两件事:

  • 在“邀请”列中追加序列化的用户id整数(从1到9999)
  • 从user.invested列中检索所有用户id(反序列化它?)
来自:

序列化(属性名称,类名称=对象)

如果有一个属性需要作为对象保存到数据库中,并作为同一对象检索,则使用此方法指定该属性的名称,该属性将自动处理。序列化是通过YAML完成的。如果指定了
class\u name
,则在检索时序列化对象必须属于该类,否则将引发
serializationtypemissmatch

因此,如果要将整数数组存储为序列化对象,则:

class User < ActiveRecord::Base
    serialize :invites, Array
    #...
end
当然,这并不能验证数字是否有效或是否没有重复的数字(但可以使用数组而不是数组),它也不会阻止您在其中放入字符串

但我不建议您这样做,序列化几乎总是一个错误,以后会再次困扰您。就数据库而言,序列化列是一个不透明的数据块:您不能就地更新它,也不能查询它,您所能做的就是将它从数据库中拉出并放回数据库
serialize
使用YAML进行序列化,如果您需要在数据库中处理序列化数据,这是一种糟糕的格式;在升级过程中,您还可以遇到


您最好设置一个传统的关联表和一个单独的模型(可能使用)来处理这种情况。

不要这样做\u如果您想单独访问多个数据,请永远不要将多个数据存储到一个字段中。关于如何访问这些数据的任何建议,或者以其他方式,或者这完全不可行?虽然序列化可以用于整数也可以创建一个邀请表,带有邀请者id和被邀请者id,每个邀请都是一行,链接到两个参与者。好吧,我知道现在我在这方面完全走错了路,现在我明白我应该更好地使用has\u many,通过它也可以更容易地在视图中显示数据,谢谢你澄清这一点
user.invites = [ 1, 2, 3 ]
user.invites.push(11)