I think the best way to implement HABTM is using midle model, it will useful
for your query performance
Example
Model Book
has_many :book_category_relations
has_many :categories, :through => :book_category_relation
end
Model Category
has_many :book_category_relations
has_many :books, :through => :book_category_relations
end
Model BookCategoryRelation
belongs_to :book
belongs_to :category
end
So if you want search book with some conditions will be:
@books = Book.all(:joins => "INNER JOIN book_category_relations ON
books.id= book_category_relations.book_id
INNER JOIN categories ON
book_category_relations.category_id = categories.id",
:conditions => ["categories.name LIKE ?",
"%#{your_filter}%"])
On Mon, Feb 7, 2011 at 10:51 PM, miaout17 <[email protected]> wrote:
> Consider the following scenario:
>
> Book has_and_belong_to_many Category.
> In other words, a category may have a lot of books, and a book can
> have more than one category.
>
> What is the best practice to query all books related to some specified
> categories.
>
> For example, if I have following books
> "From Java To Ruby" - Category: Java, Ruby
> "Ruby Programming" - Category: Ruby
> "Inside Python" - Category: Python
>
> If I search Java & Python, I got "From Java To Ruby" and "Inside
> Python".
>
> My goal is use a single query join to fetch the results.
> It's possible to use find_by_sql, but I wonder if is there any better
> way?
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Talk" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/rubyonrails-talk?hl=en.
>
>
--
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.