程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Ruby on rails開發從頭來(四十四)- ActiveRecord基礎(創建記錄)

Ruby on rails開發從頭來(四十四)- ActiveRecord基礎(創建記錄)

編輯:關於JAVA

Active Record使得實現CRUD的數據庫基本操作變得簡單,在下面的幾節裡我們使用Mysql數據庫中的orders表來進行CRUD的操作,這次先看創建(Create)。

我們假想有一個Model,名為Order:

class Order < ActiveRecord::Base
end

在面向對象的模型裡,表對應類,表中的行對應類的對象。我們可以通過創建一個類的對象來創建一條記錄。對orders表,我們可以使用Order.New()方法來創建一個Order的對象,也就對應了orders表的一條記錄,然後我們給該對象的每個屬性賦值,最後,我們調用對象的save()方法將數據寫回數據庫,如果不調用save()的話,那麼這個對象僅僅在內存中存在,而不是數據庫。

an_order = Order.new
an_order.name = "Dave Thomas"
an_order.email = "[email protected]"
an_order.address = "123 Main St"
an_order.pay_type = "check"
an_order.save

Active Record的構造器有一個可選的塊(block),這個塊可以將創建的Order對象做為參數,這樣就不需要再創建一個Order類的對象的變量了:

Order.new do |o|
o.name = "Dave Thomas"
# . . .
o.save
end

Active Record也可以接收一組哈希(Hash)參數的值來作為可選參數,由屬性的名字和相對應的值組成:

an_order = Order.new(
:name => "Dave Thomas",
:email => "[email protected]",
:address => "
123 Main St
",
:pay_type => "check")
an_order.save

注意到現在為止,我們還沒有任何關於id的設置,這是因為我們使用Active Record的默認約定,將orders表的主鍵為一個integer類型的列。在存入數據庫的時候,Active Record自動給新建的對象生成一個唯一的值,並且設置到id屬性上,我們可以在save()之後查詢id的值:

an_order = Order.new
an_order.name = "Dave Thomas"
# ...
an_order.save
puts "The ID of this order is #{an_order.id}"

new()構造函數在內存中創建了一個Order類的對象,你需要在某個時候調用save()方法來保存到數據庫。Active Record還有一個約定的方法create(),下面的例子說明這個方法的用法,同時展示了創建對象和存儲到數據庫:

an_order = Order.create(
:name => "Dave Thomas",
:email => "[email protected]",
:address => "123 Main St",
:pay_type => "check")

也可以給create()方法傳遞哈希(hash)的數組,在數據庫中創建多條記錄,並且返回對應的對象數組。

orders = Order.create(
[ { :name => "Dave Thomas",
:email => "[email protected]",
:address => "123 Main St",
:pay_type => "check"
},
{ :name => "Andy Hunt",
:email => "[email protected]",
:address => "
456 Gentle Drive
",
:pay_type => "po"
} ] )

方法new()和create()的真正目的就是讓我們可以通過一組參數就能夠創建Model對象:

order = Order.create(params)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved