Ruby on rails 获取与Rails相似的模型

Ruby on rails 获取与Rails相似的模型,ruby-on-rails,Ruby On Rails,我的业务类中有以下方法: def similar_businesses(n) Business.where(:category_id => category_id, :city_id => city_id).where("id NOT IN (?)",id).limit(n).order("RANDOM()") end 它基本上抓住了同一类别、同一城市的n企业 我在看一个railscast,它谈到使用类方法而不是作用域,并试图将我的代码转换为: def similar_bu

我的
业务
类中有以下方法:

def similar_businesses(n)
    Business.where(:category_id => category_id, :city_id => city_id).where("id NOT IN (?)",id).limit(n).order("RANDOM()")
end
它基本上抓住了同一类别、同一城市的
n
企业

我在看一个railscast,它谈到使用类方法而不是作用域,并试图将我的代码转换为:

def similar_businesses(n)
    where(:category_id => category_id, :city_id => city_id).where("id NOT IN (?)",id).limit(n).order("RANDOM()")
end
注意,
业务
不再存在

但是,我得到一个错误,
未定义where方法…


我刚刚开始使用rails,我还想知道这两种方法之间是否有任何区别?为什么我会犯这个错误

您需要将该方法定义为
def self.similous\u business
,以使其成为类方法。

似乎您希望将
similous\u business
用作类方法,而不是实例方法。两者的区别在于,您为类(如Business)使用class方法,而为类(如
@Business=Business.new)应用实例方法

试用

def self.similar_businesses(n)
  where(:category_id => category_id, :city_id => city_id).where("id NOT IN (?)",id).limit(n).order("RANDOM()")
end

好吧,我明白。一个会比另一个更有效吗?在上面的例子中,效率没有区别,因为你基本上是用同样的方式做同样的事情。我改变了,现在我得到了#
未定义的方法“相似的业务”。如何从实例中调用class方法?你不能(你可以从实例中获取类并调用它,但你不需要这样做)。你可以这样称呼它:
业务。类似的业务