[057]Ruby on Rails學習筆記(8)-Active Record學習基礎

零.前言

在操作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。

你可能感兴趣的:([057]Ruby on Rails學習筆記(8)-Active Record學習基礎)