1

Product と Creator テーブルがあり、クリエーターと製品を結合する CreatorProduct というテーブルもあります。製品には多くの作成者がいて、作成者は多くの製品を持つことができます。私がやりたいのは、クリエイターがいる製品を見つけることです。一部の製品にはクリエイターがいない可能性があります。

以下のコードを書きましたが、よりレールに適した方法で書くにはどうすればよいですか? これは Rails コンソールで機能しますが、コードに入れると未定義のメソッド「includes」が表示されます #

Product.find_by_sql("select * from Products where id in (select product_id from Creator_Products intersect select id from Products)")

ありがとう!

4

1 に答える 1

0

私はおそらく find 関数を使用して、現在のものと同様の where を使用します。

Product.find(:all, :conditions => ["exists (select * from Creators where product_id = Products.Id)"])

それ以外の場合は、アクティブなレコードがデータに結合する方法で、作成者情報を含めることでおそらく同じ結果が得られると思います (has_many が設定されていると仮定)。作成者情報が存在することを確認します...

Product.find(params[:id],:include => [:Creator],:conditions => ["Creator.product_id!=null"])

リレーションシップをまだ設定していない場合は、モデルで次のように定義する必要があります。

class Product< ActiveRecord::Base
has_many :CreatorProduct
has_many :Creators, :through => :CreatorProduct
于 2011-11-21T18:47:23.907 に答える