2011-06-25 16 views
2

私は、次のSQL文を持っている: のActiveRecordをレールにそれを変換する方法SELECT article_id FROM publications WHERE category_id IN (SELECT id FROM categories WHERE parent_id = 3)のActiveRecord: "IN" SQL文

私は試しました:Article.find(:all, :conditions => ["publications.category_id IN(?)", 3], :include => [:publications])、それは空の配列を返します。

モデル:

class Article < ActiveRecord::Base 
    has_many :publications 
    has_many :categories, :through => :publications 

class Category < ActiveRecord::Base 
    belongs_to :parent, :class_name => 'Category' 
    has_many :children, :class_name => 'Category', :foreign_key => :parent_id 
    has_many :articles, :through => :publications 
    has_many :publications 


class Publication < ActiveRecord::Base 
    belongs_to :article 
    belongs_to :category 
+0

を探すために知っていません、記事とカテゴリ?私はあなたが何かそこに間違っているかもしれないと思う。 – Yardboy

答えて

3

がこの作業ですか?

Article.find(:all, 
      :conditions => ["publications.category_id IN(SELECT id FROM categories WHERE parent_id = ?)", 3], 
      :include => [:publications]) 

私はあなたが、データベース内のツリー構造を表現するためにancestryを使用することをお勧めします、あなたのモデルは次のようになります何もa railcast about ancestry

+0

それは動作し、提案に感謝 – NARKOZ

+0

@narkoz私はあなたのモデルを見たいと思っています。私はあなたの環境でハードコードされたSQLを避けることができます。 – Yardboy

+0

@ Yardboy私はモデル – NARKOZ

0

ありますか?

Article、Category、およびPublicationモデルで関連付けが正しく設定されている必要があります。

あなたが出版のためのあなたの団体コード(has_manyの、belongs_toの、など)を投稿することができ、あなたのテーブルに設定し、関連する外部キーを持っているようですね、しかし、あなたのモデルが関連

+0

で質問を更新しました。私はそれが正しいとは思わない - SELECTステートメントに基づいて、それは彼の出版物belongs_to:categoryとCategory has_many:publicationsのように見えます。彼の団体を見る必要があります。 – Yardboy

+0

ちょうどそれを見た、10秒後に私の編集を得ました:) – ply

+0

10-4。おっと、リフレッシュしていませんでした。 – Yardboy