Поисковая логика по ассоциациям - PullRequest
0 голосов
/ 23 августа 2010

У меня есть следующие ассоциации:

class BookShelf {
  has_many :books
}

class Book {
  has_many :pages
  belongs_to :book_shelf
}

class Page {
  belongs_to :book
}

Если у меня есть объект BookShelf, как я могу использовать searchlogic для поиска страниц, принадлежащих книгам на текущей книжной полке?

В настоящее время я использую это:

@bookshelf = BookShelf.find 1
@pages = Page.title_like("something").book_id_equals(@bookshelf.books.map { |book| book.id }).paginate :page => params[:page]

Таким образом, часть paginate - это просто использование will_paginate, которое на самом деле не имеет отношения к делу.некрасиво.Есть ли улучшения?

1 Ответ

1 голос
/ 24 августа 2010

Это должно сделать свое дело, и избавит от необходимости отображать все идентификаторы книг в массив:

Page.title_like("something").book_bookshelf_id_equals(@bookshelf.id).paginate(:page => params[:page])

Я протестировал его в одном из моих приложений, где у меня была похожая структура модели (Suburb -> Region -> State), используя следующее:

Suburb.name_like("east").region_state_name_like("vi").paginate(:page => 3)

Который, казалось, добился цели.

...