零.前言
在操作Ruby on rails時,總會遇到資料的的問題,有時還會出現active record的顯示錯誤,心裡總是很納悶active record到底是啥?
與資料庫之間的關係為何、如何把這觀念給實作出來,所以才產生這篇的學習筆記。
以下會分成五個部分依序來理解,active record的概念。
一、物件關係映射與active record是啥?如何應用在rails中?
首先,active record是MVC的M,model的意味,表現商業邏輯與資料的層級,負責新增與操作需要存放在資料庫的長久資料,
而active record本身是物件關係映射系統的一種描述。
active record模式中,物件將擁有持久化的行為與資料,可以確保存取資料是物件的一部份,進而教導使用者如何寫入與寫出物件
物件關係映射,是一種技巧,簡稱ORM,目的是把程式中複雜的物件,對應到關聯式資料庫的資料表中,取出資料時不需要用到SQL的語句,總體上減少了與資料庫存取的程式碼。
active record作為ORM的框架:當中有很多重要功能,
包括表示model與資料、
表示models之間的關係、
相關model的繼承(像是comment 與 article)、
持久化資料存入資料庫的驗證(像是要一定要填姓名)
二、active record慣例勝於設定
命名慣例:資料表是複數形;model類別是單數型,第一個字母大寫
資料庫綱要慣例:外鍵為應用資料表加上_id來命名,比如item_id,在rails學習筆記(5)中,提到article_id,active record會在建立關聯時,找尋這樣的資料欄位。
三、新增active record models:
新增 Active Record Model 非常簡單。只需要建立一個ActiveRecord::Base的子類別即可
classProduct < ActiveRecord::Base
end
列表綱要的程式碼:
p = Product.new
p.name="Some Book"
puts p.name
四、覆寫慣例名稱
用ActiveRecord::Base.table_name=方法來指定對應的資料表名稱:
classProduct < ActiveRecord::Base
self.table_name ="PRODUCT"
end
甚至也可以修改資料庫的欄位名稱:
classProduct < ActiveRecord::Base
self.primary_key ="product_id"
end
五、CRUD讀寫資料:
new方法回傳一個新的物件,而create會會傳新物件並存入資料庫,前者是創造出來,不會儲存,還得加上xxx.save才行
new得部分:
user = User.new
user.name="David"
user.occupation ="Code Artist"
create得部分:
user = User.create(name:"David", occupation:"Code Artist")
read的部分:
# return the first user named David
david = User.find_by(name:'David')
update得部分:
user = User.find_by(name:'David')
user.update(name:'Dave')
或者是批量修改
User.update_all"max_login_attempts = 3, must_change_password = 'true'"
delete部分:
user = User.find_by(name:'David')
user.destroy
六、驗證資料:
classUser < ActiveRecord::Base
validates:name, presence:true
end
七、資料遷移
要真正的建立一張資料表,需要執行:rake db:migrate;要回滾則是執行:rake db:rollback。