Ruby on Rails,ActiveRecord和ActiveRelation


MVC架構中的Model層負責接受Controller收集的請求參數信息,一般來說去干兩件事情。

  1. 將Controller從View收集到的頁面數據按照業務需求轉化為實體對象之間的關系保存到關系數據庫中。
  2. 以Controller傳遞過來的參數作為條件,根據應用業務邏輯從關系數據庫中獲取數據轉換為實體對象,計算它們之間的關系,將計算結果反送給Controller轉交給View顯示。

對於在面向對象思想武裝下的Model層來說,無論哪個哪種處理,都免不了關系數據庫記錄與實體對象之間的轉化這個過程。

1338710330_3862

其中最最常用的就是持久化對象的基本操作:創建、更新、查詢、刪除(CURD)。在Rails中進行實體對象的增刪改查就不得不提到ActiveRecord,在介紹ActiveRecord之前要先對active record這個概念加以了解。

active record,注意是小寫而且是兩個單詞。是一種編程模式,特點是一個模型類對應關系型數據庫中的一個表,而模型類的一個實例對應表中的一行記錄。這使得我們能夠方便地將數據庫中的記錄轉化為實體對象,或將實體對象持久化到數據庫中,以便業務代碼中處理實體對象之間的關系而不再是數據庫表記錄之間的關系。其實任何關系數據庫與面向對象語言交互的場景下都可以使用這種思想而不局限於某種編程語言。

ActiveRecord,一個單詞。是Rails對於這種模式的一種實現,以便我們更快速的實現對象在關系數據庫中的持久化開發工作。業務中的實體類繼承ActiveRecord,便能方便的將數據庫中的記錄與實體對象之間進行轉換。更近一步,ActiveRecord是一種能夠讓你的實體對象變“聰明”的幫手,它能夠根據自己的結構推知當前的數據庫結構並能夠和其交互以達到對象的增刪改查。

比如說,對於某一個繼承了ActiveRecord的User對象來說增刪改查操作變得非常方便。我們一般來說都不用關心隱藏在后面的SQL語句編寫工作。

#insert
user=User.new
user.user_name="abbuggy"
user.save
#update
user.user_name="terry"
user.save
#delete
user.delete
下面看看ActiveRelation,這是Rails3版本中增加入的內容,是一個對象關系算法解析器。ActiveRelation能夠將復雜的查詢分解為簡單的逐步調用,通過一系列基於上一次調用的結果上的調用完成復雜的查詢,而不用去關心具體的SQL語句編寫工作。大多數情況下ActionRelation是隱藏在幕后的,不被我們直接使用,我們能看到的只是對於ActionRecord的操作。

下面的操作先取出Users中所有email為“”的對象列表,之后再將這些對象按照name進行升序排列。SQL語句對我們使用來說是完全透明的。

users=User.where(:email=>"")
users=users.order("name ASC").limit(5)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM