首先,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