在单列中保存Rails对象数组

时间:2015-11-26 11:44:48

标签: ruby-on-rails ruby ruby-on-rails-4

我有两张表ArticleMaster 哪个表具有属性(数据类型:字符串,数据:文本)

所以我必须将我的所有文章存储到Master.data所以我正在做

//文章对象数组

@articles = Article.all

//将我的所有文章保存到主表

Master.new(:datatype=>"Article"m :data=> @articles).save

将所有数组对象保存为String 但是在我检索数据时将来使用。

Master.where(:datatype=>"Article").first.data"

=> "[obj1,obj2]"

它的格式是字符串 我需要

Article.all
有可能吗? 有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

<强>模型

has_many :articles

<强>文章

belongs_to :master

现在,文章表格会有master_id列,用于存储记录的ID

所以,你可以这样做:

@master = Master.new(attributes_for_master_table)
@master.articles.build(attributes_for_article_table)
@master.save

这将保存以及所有相关的文章

修改

为了回答您的评论,可能存在多种原因导致无法将所有数据存储在单个列中:

1&GT;首先,列的大小将随着时间的推移而成为一个问题,因为它被限制在一定数量(无论使用DBMS)

2 - ;通过使用关联,您不需要遍历所有记录。如果您知道基本记录ID,那么您只能搜索关联的从属记录。

例如:您不必执行Article.all并搜索某些内容。相反,您可能很容易做@master.articles.where(condition)

协会可能允许你来回走动,例如:

您可能知道属于主文章的文章( @ master.articles ),也可能会获得您拥有任何文章对象的主记录( @ article.master )。但是,根据您的方法,了解主记录 id 是一项授权。

答案 1 :(得分:0)

您无法将Ruby对象直接存储到数据库中。您必须将该数据序列化或转储为某种字符串格式,并在从数据库读取后将该字符串反序列化为对象。

实现这一目标的一种方法是使用YAML.dump(@articles)YAML.load(master.data)的组合。另一种方式可能是使用Rails' serialization

但我怀疑这会比从另一张表中阅读Article.all更快。