Как объединить полиморфные таблицы в одном запросе? - PullRequest
5 голосов
/ 05 октября 2010

У меня есть 2 полиморфные ассоциации, через которые мне нужно выполнить запрос.

У меня есть таблица news_article, которая имеет полиморфную ассоциацию с командами, игроками и т. Д. Эти команды, игроки и т. Д. Имеют полиморфную ассоциацию с фотографиями через фототенику.

Мне нужно найти все статьи, в которых есть хотя бы одно изображение шириной 500 пикселей.

Модель Article у меня есть has_many: команды (через полиморфную таблицу) и в командах у меня есть has_many: фотографии (хотя другая полиморфная таблица)

Я думал, что смогу использовать соединения вот так

Article.find (: last,: joins => {: groups =>: photos},: условие => "photos.aspect_ratio <1.55 AND photos.aspect_ratio> 1.30")

но это не работает. Есть идеи?

Ответы [ 2 ]

2 голосов
/ 11 октября 2010

Надеюсь, это ваша установка ...

class Article < ActiveRecord::Base
  has_many :teams
end

class Team < ActiveRecord::Base
  has_many :photos
end

class Photo < ActiveRecord::Base
  belongs_to :teams
end

Можете ли вы использовать следующий запрос и сообщить нам, работает ли он у вас?

Article.find(:last, :include => {:teams => :photos}, :conditions => "photos.aspect_ratio < 1.55 AND photos.aspect_ratio > 1.30")

Надеюсь, это поможет ...

, с уважением Команда Sourcebits

2 голосов
/ 11 октября 2010

Если вы уже используете Rails 3:

Article.joins(:teams).where(condition).joins(:photos).where(condition)

Если вы используете Rails 2.3.8:

Article.find(:all, :include => {:teams => :photos}, :conditions => [YOUR CONDITIONS])

Надеюсь, это поможет ...

...