CRUD—Create

在对象-关系的范式中,表被表现为类,并且表内的行被对应于那个类的对象。因此我们
通过创建相应类的对象来创建表中的行,是顺理成章的事。
1、我们可以通过调用Order.new()
来创建一个对象,表示orders 表中的行。然后我们可以填充各种属性的值(对应表的各个列)。
最后,我们调用对象的save()方法存储回order 到数据库中。没有这个方法调用的话,order
只会存在于本机的内存中。
an_order = Order.new
an_order.name = "Dave Thomas"
an_order.email = "dave@pragprog.com"
an_order.address = "123 Main St"
an_order.pay_type = "check"
an_order.save

2、Active Record 的构造函数可以有一个可选的块参数。如果出现的话,这个块会将新创
建的order 作为自己的一个参数被调用。这种用法很有好处,如果你想创建并保存一个order,
又不想创建一个临时变量时,就会用到。
Order.new do |o|
o.name = "Dave Thomas"
# . . .
o.save
end

3、最后,Active Record 还有一种形式的构造函数,它接受一个属性值的哈希表做为一个
可选参数。这个哈希表内每个条目都对应属性集中的每个名字和值。在本书稍后我们会看到,
这种用法在把HTML 表格中的值存储到数据库行中时非常有用的。
an_order = Order.new(
:name => "Dave Thomas",
:email => "dave@pragprog.com",
:address => "123 Main St",
:pay_type => "check")
an_order.save
注意上面的所有代码中,我们都没有对新行设置id 这个属性值。因为我们使用Active
Record 默认的integer 列作为主键。Active Record 自动创建一个唯一值,并且只在存储该
行之前设置id 属性。我们可以通过查询这个属性来看看它的值:
an_order = Order.new
an_order.name = "Dave Thomas"
# ...
an_order.save
puts "The ID of this order is #{an_order.id}"

4、new()构造函数是在内存中创建一个新的Order 对象。我们必须记得在某个时间点上要存
储它。Active Record 还有一个方便的方法create()。它是既实例化model 对象又把它存储到数据库中。
an_order = Order.create(
:name => "Dave Thomas",
:email => "dave@pragprog.com",
:address => "123 Main St",
:pay_type => "check")

你还可以给create()传递一个属性哈希表数组;它将在数据库中创建多行记录并返回一
个对应的model 对象数组。
orders = Order.create(
[ { :name => "Dave Thomas",
:email => "dave@pragprog.com",
:address => "123 Main St",
:pay_type => "check"
},
{ :name => "Andy Hunt",
:email => "andy@pragprog.com",
:address => "
456 Gentle Drive
",
:pay_type => "po"
} ] )
new()和create()接受一个值的哈希表的真正原因就是你可以从表格参数中直接构造
model 对象。
order = Order.create(params)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值