我有两张表Article
和Master
哪个表具有属性(数据类型:字符串,数据:文本)
所以我必须将我的所有文章存储到Master.data所以我正在做
//文章对象数组
@articles = Article.all
//将我的所有文章保存到主表
Master.new(:datatype=>"Article"m :data=> @articles).save
将所有数组对象保存为String 但是在我检索数据时将来使用。
Master.where(:datatype=>"Article").first.data"
=> "[obj1,obj2]"
它的格式是字符串 我需要
Article.all
有可能吗?
有人可以帮我吗?
答案 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
更快。