1

Businessクラス内に次のメソッドがあります。

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

通知Businessはもうありません。

ただし、エラーが発生しますundefined where method for ...

レールを始めたばかりですが、この2つの方法に違いはないのでしょうか。そして、なぜこのエラーが発生するのですか?

4

2 に答える 2

1

インスタンスメソッドではなく、クラスsimilar_businessesメソッドとして使用したいようです。2つの違いは、Businessなどのクラスに対してクラスメソッドを再生し、のようなものに対してインスタンスメソッドを適用することです。@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
于 2012-11-11T23:54:03.797 に答える
1

def self.similar_businessesメソッドをクラスメソッドにするように定義する必要があります。

于 2012-11-11T23:52:29.380 に答える