У меня есть 2 модели с много-ко-многим (упрощенный здесь с примером книги-авторов):Рубин на рельсы: найти не извлекает все объекты, связанные с использованием условий при
class Book < ActiveRecord::Base
has_and_belongs_to_many :authors
end
class Author < ActiveRecord::Base
has_and_belongs_to_many :books
end
мне нужно отобразить список книг, а под каждым - список его авторов. Пользователи могут фильтровать через определенного автора.
Я пытаюсь фильтровать через автора следующим образом:
Предположим, что есть только одна результирующая книга, и у нее 3 автора.
books = Book.find(:all, :include => :authors, :conditions => "authors.id = 5")
Когда я пытаюсь список различных авторов книг, извлекаемых, я получаю только автор ID = 5.
books.first.authors.size # => 1
books.first.authors.first.id # => 5
Я ожидал бы рельсы, чтобы пойти и получить все разные авторы, связанные с книгами, либо во время запроса находят или в качестве последующего запроса, но это не делает.
Как я могу решить эту проблему? Есть что-то не так с ассоциациями? запрос поиска?
Спасибо.
Спасибо, я подумал об этом решении, но я надеялся, что есть более простое решение. Что касается объединений: когда я использую объединения в этом примере, я бы получил массив из 3 книг, которые являются одной и той же книгой, каждая из которых имеет другого автора, поэтому она не решает проблему ... – Nadav
Хорошо, когда вы говорите это Например, я предполагаю, что вы имеете в виду, когда вы просто меняете: include to: join в описанном вами примере. Потому что я проверил код, который я поставил последним, и это сработало для меня. – DanneManne
Да, ваш код работает, но я не хочу разбить его в коде на 2 разных запроса. Разве нет способа запуска одного запроса на рельсы без извлечения идентификаторов вручную, а затем для извлечения самих объектов? – Nadav