Выборка записей через таблицу соединений в Ruby on Rails - PullRequest
3 голосов
/ 18 сентября 2010

У меня три модели

class Collection < ActiveRecord::Base
  has_many :presentations
  has_many :galleries, :through => :presentations
end

class Gallery < ActiveRecord::Base    
  has_many :presentations
  has_many :collections, :through => :presentations
end

class Presentation < ActiveRecord::Base
  belongs_to :collection
  belongs_to :gallery 
end

Как получить все коллекции, которые не принадлежат данной галерее?

Мои знания SQL только зачаточны. Я также хочу позволить Rails (2.3) выполнять работу без явного использования выражения SQL.

1 Ответ

1 голос
/ 18 сентября 2010

Из коробки вы технически должны написать некоторый SQL (предложение where) ...

gallery_to_exclude = Gallery.first
Collection.find(:all,
  :include => :presentations,
  :conditions => ['presentations.gallery_id IS NULL OR presentations.gallery_id != ?',
                   gallery_to_exclude.id])

Если вы хотите использовать Searchlogic , вы можете избежать этого, хотя:

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