簡體   English   中英

Rails自定義模型功能

[英]Rails Custom Model Functions

我正在上數據庫課程,老師希望我們開發一個電子商務應用程序。 她說我們可以使用我們喜歡的任何框架,並且現在學期已經結束了一半,她決定讓Rails做太多事情,並希望我明確地編寫我的SQL查詢。

因此,我想做的是編寫自己的函數並將其添加到模型中,以實質上復制已經存在的功能(但使用我自己編寫的SQL)。

因此,問題就變成了:

  1. 如何在模型內執行手動創建的查詢?
  2. 如何將結果填充到一個空對象中,然后可以返回該空對象並在視圖中使用它?

另外,我知道這是一種可怕的做法,我現在不想在PHP中重新開始。

我認為,您應該知道2-3種真正必要的方法才能使用它。 (假設我們至少有兩個模型,Order和User(order的客戶))例如,僅在數據庫上運行查詢,請使用以下命令:

Order.connection.execute("DELETE FROM orders WHERE id = '2')

為了從數據庫中獲取對象數,最好的方法是使用方法“ count_by_sql”,它是可擴展的。 我在我的項目中使用它,其中表有超過50萬條記錄。 計算應用程序的所有工作都交給了數據庫,它的工作效率比應用程序高得多。

Order.count_by_sql("SELECT COUNT(DISTINCT o.user_id) FROM orders o")

該查詢獲取有訂單的所有uniq用戶的數量。 我們可以“ JOIN ON”表,使用“ ORDER BY”對結果進行排序並分組結果。

最常用的方法:find_by_sql

Order.find_by_sql("SELECT * FROM orders")

它會返回一個包含紅寶石對象的數組。

假設您有購買

class Purchase < ActiveRecord:Base
    def Purchase.find(id)
        Purchase.find_by_sql(["Select * from purchases where id=?", id])
    end  
end 

也許您想要特定購買的產品。 您可以在“購買”模型中手動定義purchase_items。

class Purchase < ActiveRecord:Base
    def purchased_items
        PurchasedItem.find_by_sql(["Select * from purchased_items where purchase_id=?",self.id])
    end
end

因此,例如,在您現在要獲取特定購買商品的控制器中,您現在可以執行此操作

@purchase = Purchase.find(params[:id])
@purchased_items = @purchase.purchased_items

如果需要更原始的數據庫連接,則可以查看ActiveRecord:Base.connection.execute(sql)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM