首先,Ruby中沒有靜態函數。 self.get_inventory
是一個類方法,它實際上是Company
類中的單例實例方法。調用本身是一個類方法,可以動態定義其他類方法,在這種情況下爲out_of_stock
和in_stock
。第二,很難說出你想要做什麼,因爲你沒有包括你的整個方法,但是我假設你試圖獲得具有特定公司ID的StockInventory
的實例,庫存狀態。
的ActiveRecord允許您使用發現者,因爲它似乎你已經在這裏做了,或者關係,這是一個更靈活一點,因爲他們通常是可鏈接的,因爲它們的執行被延遲,直到絕對必要的,這意味着您可以將它們傳遞給不同的方法而不需要訪問數據庫。除非我用已知的身份證查找單個對象,否則我通常會因爲這個原因而堅持關係。
我打算做一些假設,因爲你的問題不是特別清楚。如果您已經定義Company
和StockInventory
(如has_many :stock_inventories
和belongs_to :company
)之間的關係,你可以使用這種關係爲出發點,並在StockInventory
類中定義這樣的方法:
def self.in_stock
where(stock_status: "in stock") # or whatever
end
注意,而不是傳遞作爲Company
類方法的參數的Company
實例最終加載其他類(這應該是紅旗),您可以直接在StockInventory
類或任何StockInventory
關係上調用此實例。此外,由於它是一種關係,因此您可以將其他ActiveRecord方法鏈接到它,即my_company.stock_inventories.in_stock.limit(10)
。
你需要改變這個方法來適應你的特定數據庫列和狀態,但是這是非常複雜的,因爲它需要得到。
無論如何,我建議你閱讀Active Record Query Interface指南 - 一旦你瞭解它的工作原理,你可以用它做很多事情。
你錯過的一件事是,那些[可怕和討厭的動態查找方法](http://edgeguides.rubyonrails.org/4_0_release_notes.html#active-record- deprecation)已被棄用,用明智的'where'替換它們,電話(正如你所做的)是正確的事情。 – 2013-03-23 04:37:54
哇,很高興聽到有關發現者。展望未來! – 2013-03-23 04:40:18