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