2011-11-28 6 views
1

J'ai 2 modèles: utilisateur et livrerecherche ActiveRecord par rails association

et une propriété de joint modèle qui relient l'utilisateur et livre

class Book < ActiveRecord::Base 
    has_many :ownerships 
    has_many :users, :through => :ownerships,:uniq=>true 
    ... 
end 

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

class Ownership < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :book 
end 

Le scénario est que lorsque l'utilisateur A est à la recherche de livres sur mon site Web, je renvoie les livres connexes qui sont la propriété des utilisateurs autour de l'utilisateur A (par exemple, ils sont tous les deux dans la même université). Puis-je faire cela avec l'accociation des rails?

+2

Essayez de définir '' scope' sur Book' qui obtient des livres par certains 'lambda' qui reçoit par exemple l'utilisateur ou de l'utilisateur en cours. En lambda, vous pouvez formater votre requête sous une forme ordinaire, comme les jointures (: user) .where (: users => {: university_id => user.university_id}). (En utilisant [meta_where] (https://github.com/ernie/meta_where) ou [squeel] (https://github.com/ernie/squeel) pour Rails 3.1) –

Répondre

0

grâce Guk @ Mark

ce que je fais enfin est:

scope :same_university,lambda{|q,current_user| 
    where("title like '%#{q}%'").joins(:sell_infos).where(
     "sell_infos.university is '#{current_user.university}'") 
    } 
Questions connexes