[057]Ruby on Rails學(xué)習(xí)筆記(8)-Active Record學(xué)習(xí)基礎(chǔ)

零.前言

在操作Ruby on rails時,總會遇到資料的的問題,有時還會出現(xiàn)active record的顯示錯誤,心裡總是很納悶active record到底是啥?

與資料庫之間的關(guān)係為何、如何把這觀念給實(shí)作出來,所以才產(chǎn)生這篇的學(xué)習(xí)筆記。

以下會分成五個部分依序來理解,active record的概念。


一、物件關(guān)係映射與active record是啥?如何應(yīng)用在rails中?

首先,active record是MVC的M,model的意味,表現(xiàn)商業(yè)邏輯與資料的層級,負(fù)責(zé)新增與操作需要存放在資料庫的長久資料,

而active record本身是物件關(guān)係映射系統(tǒng)的一種描述。

active record模式中,物件將擁有持久化的行為與資料,可以確保存取資料是物件的一部份,進(jìn)而教導(dǎo)使用者如何寫入與寫出物件

物件關(guān)係映射,是一種技巧,簡稱ORM,目的是把程式中複雜的物件,對應(yīng)到關(guān)聯(lián)式資料庫的資料表中,取出資料時不需要用到SQL的語句,總體上減少了與資料庫存取的程式碼。

active record作為ORM的框架:當(dāng)中有很多重要功能,

包括表示model與資料、

表示models之間的關(guān)係、

相關(guān)model的繼承(像是comment 與 article)、

持久化資料存入資料庫的驗證(像是要一定要填姓名)


二、active record慣例勝於設(shè)定

命名慣例:資料表是複數(shù)形;model類別是單數(shù)型,第一個字母大寫

資料庫綱要慣例:外鍵為應(yīng)用資料表加上_id來命名,比如item_id,在rails學(xué)習(xí)筆記(5)中,提到article_id,active record會在建立關(guān)聯(lián)時,找尋這樣的資料欄位。


三、新增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=方法來指定對應(yīng)的資料表名稱:

classProduct < ActiveRecord::Base

self.table_name ="PRODUCT"

end

甚至也可以修改資料庫的欄位名稱:

classProduct < ActiveRecord::Base

self.primary_key ="product_id"

end


五、CRUD讀寫資料:

new方法回傳一個新的物件,而create會會傳新物件並存入資料庫,前者是創(chuàng)造出來,不會儲存,還得加上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


七、資料遷移

要真正的建立一張資料表,需要執(zhí)行:rake db:migrate;要回滾則是執(zhí)行:rake db:rollback。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容