まず、Ruby には静的関数がありません。これself.get_inventory
はクラス メソッドであり、実際にはCompany
クラスのシングルトン インスタンス メソッドです。呼び出し自体は、scope
他のクラス メソッド (この場合はout_of_stock
と) を動的に定義するクラス メソッドin_stock
です。
第二に、メソッド全体が含まれていないため、何をしようとしているのかわかりにくいですStockInventory
が、特定の会社 ID と在庫ステータスを持つ のインスタンスを取得しようとしていると仮定します。
ActiveRecord では、ここで行ったように finders を使用できます。または、通常はチェーン可能であり、実行が絶対に必要になるまで遅延されるため、もう少し柔軟な関係を使用できます。データベースにアクセスせずにメソッド。既知の ID を持つ単一のオブジェクトを検索する場合を除き、通常はこの理由からリレーションに固執します。
あなたの質問は特に明確ではないので、いくつかの仮定を立てます。と の間Company
にStockInventory
( と のようなhas_many :stock_inventories
)関係を定義した場合belongs_to :company
、その関係を出発点として使用し、StockInventory
クラスで次のようなメソッドを定義できます。
def self.in_stock
where(stock_status: "in stock") # or whatever
end
最終的に別のクラスをロードするクラス メソッドCompany
にインスタンスを引数として渡すのではなく(これは危険信号である必要があります)、クラスまたは任意のリレーションでこれを直接呼び出すことに注意してください。さらに、これはリレーションであるため、他の ActiveRecord メソッドをチェーンすることができます。Company
StockInventory
StockInventory
my_company.stock_inventories.in_stock.limit(10)
特定のデータベースの列とステータスに合わせてこのメソッドを変更する必要がありますが、これは非常に複雑です。
いずれにせよ、Active Record Query Interfaceガイドを読むことをお勧めします。仕組みを理解すれば、できることがたくさんあります。