2010-08-23 8 views
0

je les associations suivantes:Searchlogic sur les associations

class BookShelf { 
    has_many :books 
} 

class Book { 
    has_many :pages 
    belongs_to :book_shelf 
} 

class Page { 
    belongs_to :book 
} 

Si j'ai un objet BookShelf, comment pourrais-je utiliser searchlogic pour rechercher des pages qui appartiennent aux livres dans l'étagère de livre en cours?

Actuellement, je suis en utilisant celui-ci:

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

Ainsi, la partie paginate est juste l'utilisation de will_paginate qui est pas vraiment relavent. Le point est que je pense que ces lignes de codes sont quelque peu laides. Y a-t-il des améliorations?

Répondre

1

Cela devrait faire l'affaire, et de supprimer la nécessité de cartographier tous les livres ids dans un tableau:

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

Je l'ai testé dans l'une de mes applications, où j'avais une structure de modèle similaire (Banlieue - > Région -> État) en utilisant ce qui suit:

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

Ce qui semblait faire l'affaire.

Questions connexes