Ruby on rails開發從頭來(四十七)- ActiveRecord基礎(強大的find方法)

來源:互聯網
上載者:User

現在我們知道如何指定條件,現在我們來看看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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.