2010-05-03 3 views
0

Je tables d'arbresrails: instruction include avec deux sur les conditions

  • livres
  • marque-pages
  • utilisateurs

où il y a de m relation de livres aux utilisateurs à travers les signets. Je cherche une requête, où je reçois tous les livres d'un certain utilisateur, y compris les signets. Si aucun signet sont là, il devrait y avoir une valeur nulle inclus ...

mon instruction SQL ressemble:

SELECT * FROM `books` 
LEFT OUTER JOIN `bookmarks ` 
ON bookmarks.book_id = books.id 
AND bookmarks.user_id = ? 

En rails, je ne connais que le: instruction include, mais comment puis-je ajouter la deuxième marque-pages .user_id =? déclaration dans la section ON de cette requête? si je le mets dans la partie: conditions, aucun résultat nul ne sera retourné!

Merci! Markus

+1

Qu'est-ce qu'un "n/relation m"? –

+0

n à m relation – Markus

Répondre

0

Ajoutez les associations suivantes à vos modèles:

class Book < ActiveRecord::Base 
    has_many :bookmarks 
    has_many :users, :through => :bookmarks 
end 

# assuming bookmarks table has book_id and user_id columns. 
class Bookmark < ActiveRecord::Base 
    belongs_to :book 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_many :bookmarks 
    has_many :books, :through => :bookmarks 
end 

Maintenant, vous pouvez faire des appels suivants:

u.books # books for a user 
u.bookmarks # bookmarks for a user 

# find the user and eager load books and bookmarks 
User.find(params[:id], :include => [:books, :bookmarks]) 


b.users # users for a book 
b.bookmarks # bookmarks for a book 

# find the book and eager load users and bookmarks 
Book.find(params[:id], :include => [:users, :bookmarks]) 
Questions connexes