0

假设我有一个哈希:

{"MemberId"=>"MID-0000001", "MemberName"=>"Bruce", "OrderNumber"=>"ON-000000001"}

如何将此哈希插入到mysql中db数据库的订单表中?

实际上,这段代码将成为计划任务(Ruby on Rails 应用程序)的一部分,以便在 gem 时运行。

如果我必须提交其他信息,请告诉我。

order具有与散列中相同的列名。

4

2 回答 2

2

简短的回答:Active Record,或另一种“对象关系模型”。

将您的表视为哈希或对象的模式序列化。Ruby,通过 Active Record,可以非常智能地了解反序列化过程,但它通常由反向过程定义 - 通过读取数据库,Active Record 计算出反序列化时数据会变成什么,并从中得出什么当你序列化它时发生。

所以你通常的用例是根据你的对象找出你想要的字段(比如说,objects.each_with_object({}){|hash, obj| hash.merge!(obj)}找到你所有的字段),然后编写 Active Record 声明来实现这一点。然后Model.create(obj),您刚刚将其保存到数据库中

但是您正在“倒退”,因此可能对一些有趣的功能感兴趣:

序列化将让您将一个相当任意的对象存储到您的数据库的单个字段中(对象间引用可能很困难),有效地混合了 shema'd 和无模式范式。Postgres 有许多 功能,其中一些现在通过 ActiveRecord 成为rails 4的一部分,这将使您可以轻松地做您想做的事情 - 但是这两个选项都适用于您的数据子集。只是转储整个事情,你可以去无模式而不用担心它(相反,担心其他事情!)。或graph,为了完整起见,但这听起来不像您正在寻找的东西。

TL;博士:

1)您的哈希每个都描述一个对象,其中每个键是一列,每个值是一行 - 只需定义 Active Record 模型并读入您的哈希。

2) 将哈希的子集粘贴到文本列中,并使用活动记录序列化或高级 postgres 功能将其解析出来。

3) 使用无模式数据库,然后将整个内容原样粘贴在那里。

最后,您的用例是相同的:Model.create({"MemberId"=>"MID-0000001", ...})

于 2013-06-07T08:01:34.303 回答
0
@order = Order.new
@order.member_id = hash['member_id']
|
|
|
|
@order.save
于 2013-06-07T07:46:12.840 回答