現在我們知道如何指定條件,現在我們來看看find方法支援的一些其他設定。
首先,理解find(:first,…)方法是非常重要的,該方法在同樣的conditions設定下,和find(:all,…)方法產生同樣的sql語句,不同之處僅在於只返回一條記錄。在調用的時候,一種的參數為:first,另一種為:all。
find方法執行一個select from這樣的sql語句,:all標記指定返回表中所有的記錄,:first返回第一條記錄。但是現在:first還不能保證你得到的就是表中的第一條記錄,原因是什嗎?我們繼續往下看。
:conditions參數指定了SQL語句的where部分,可以包含Sql語句或者包含可以替換的參數的名字,值,上一篇我們已經做了瞭解。
daves_orders = Order.find(:all, :conditions => "name = 'Dave'")name = params[:name]other_orders = Order.find(:all, :conditions => ["name = ?", name])yet_more = Order.find(:all,:conditions => ["name = :name and pay_type = :pay_type",params])
上面的find方法並不能保證按照特定的順序返回記錄,除非指定查詢的排序(order by)部分。:order參數就是用來指定SQL的排序條件的,下面的例子示範了查詢名字為Dave的訂單,並且按照pay_type,shipped_at欄位進行降序排列。
orders = Order.find(:all,:conditions => "name = 'Dave'",:order => "pay_type, shipped_at DESC")
我們還可以設定:limit參數來限制返回的記錄數,如果你使用:limit參數,或許還想指定排序條件,下面的例子返回10條記錄,並且按照指定條件排序:
orders = Order.find(:all,:conditions => "name = 'Dave'",:order => "pay_type, shipped_at DESC",:limit => 10)
參數:offset經常與:limit參數一同出現,用來指定從第一條記錄起,返回指定的位移量,下面代碼示範了:offset參數的使用:
def Order.find_on_page(page_num, page_size)find(:all,:order => "id",:limit => page_size,:offset => page_num*page_size)end