ActiveRecord: оператор SQL "WHERE IN" - PullRequest
2 голосов
/ 25 июня 2011

У меня есть следующий оператор SQL: SELECT article_id FROM publications WHERE category_id IN (SELECT id FROM categories WHERE parent_id = 3)

Как конвертировать его в Rails ActiveRecord?

Я пытался: 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

Ответы [ 2 ]

3 голосов
/ 25 июня 2011

Это работает?

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

Я бы предложил вам использовать происхождение для представления древовидной структуры в базе данных, также есть сообщение о происхождении

0 голосов
/ 25 июня 2011

Как выглядят ваши модели?

Вам понадобятся правильно настроенные ассоциации в ваших моделях статей, категорий и публикаций.

Похоже, у вас есть соответствующие внешние ключиустановить в ваших таблицах, но ваши модели не знают, чтобы искать ассоциацию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...