首先,Ruby 中没有静态函数。这self.get_inventory
是一个类方法,它实际上是Company
类上的单例实例方法。该scope
调用本身是一个类方法,它动态定义其他类方法,在本例中为out_of_stock
和in_stock
。
其次,很难说出您要做什么,因为您没有包含整个方法,但我假设您正在尝试获取StockInventory
具有特定公司 ID 和库存状态的实例。
ActiveRecord 允许您使用finders,就像您在这里所做的那样,或者更灵活的关系,因为它们通常是可链接的,并且因为它们的执行被延迟到绝对必要时,这意味着您可以将它们传递给不同的方法而不打数据库。除非我正在查找具有已知 id 的单个对象,否则我通常会因此而坚持使用关系。
我将做一些假设,因为你的问题不是特别清楚。Company
如果你定义了and之间的关系StockInventory
(比如has_many :stock_inventories
and 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指南——一旦你了解了它的工作原理,你可以用它做很多事情。