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

Ruby on rails開發從頭來(四十八)- ActiveRecord基礎(動態查詢)

編輯:關於JAVA

數據庫上最常運行的查詢莫過於根據指定條件返回符合的結果集,查詢可能是返回所有名字為‘dave’的訂單,或者是某個博客上所有標題含Rails的post,在很多其他的框架和程序設計語言中,你需要創建sql來執行查詢,Active Record利用了ruby語言所包含的動態能力來做這些事。

例如,我們的Order Model包含了諸如name,email,address這樣的屬性,我們可以使用這些名字對應的find方法來查詢,例如:

order = Order.find_by_name("Dave Thomas")
orders = Order.find_all_by_name("Dave Thomas")
order = Order.find_all_by_email(params['email'])

如果你調用了一個Model類的find_by_或者find_all_by_這樣字符串打頭的格式的方法,Active Record將它們轉換成一個查詢器(finder),而將方法後面的字符串作為字段名轉換find方法的參數,例如:

  order = Order.find_by_name("Dave Thomas", other args...)

上面的調用等效的轉換為:

  order = Order.find(:first,
:conditions => ["name = ?", "Dave Thomas"],
other_args...)

類似的,調用一個find_all_by_xxx方法相當於調用find(:all,… )方法。

到這裡魔術還沒有停止,Active Record還可以對多個列創建查詢器(finder),例如,你可以寫:

  user = User.find_by_name_and_password(name, pw)

相當於:

  user = User.find(:first,
:conditions => ["name = ? and password = ?", name, pw])

為了確定要檢查哪些字段,Active Record簡單的分割find_by_和find_all_by_後面的字符串,這在大多數情況下是夠用的,除非你的根本就沒有某個在方法名中包含的字段。

注意,Active Record並不提供在find_by_或find_all_by後面的兩個字段名中含有_or_。

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