0

Da Mongo nicht relational ist, frage ich mich, wie man einen bestimmten Typ auf einer polymorphen Assoziation von has_many findet.mongoid wo auf has_many association

Ich habe 3 Modelle, [Ort, Stadt, Land &] alle 3 können Bewertungen haben (polymorphe)

Wie kann ich alle Beiträge mit einem bestimmten Modell Verein zurückkehren? Ich weiß, wie man es mit einer einfachen has_many-Assoziation macht, aber nicht mit einer polymorphen?

Normalerweise würde ich so etwas tun:

@user = User.where(username: params[:user]).first 
    @user ? @reviews = @reviews.where(user_id: @user.id) : @reviews = nil 

Aber für eine polymorphe Vereinigung bin ich verloren?

#@reviews = params[:review_type].constantize if params[:review_type].present? #@reviews.reviewable.where(review_type: params[:review_type]) 

@reviews = Review.order_by([:updated_at, :desc]).page(params[:page])#.order(sort_column + " " + sort_direction) 
+0

Warum user.reviews' nicht verwenden '@? – MikDiet

+0

Sorry, vielleicht war ich nicht klar, es ist nicht das Benutzermodell, ich habe das nur als Beispiel dafür benutzt, wie ich es normalerweise machen würde (nicht polymorph) – ere

+0

Ich verstehe, aber polymorphe Assoziationen funktionieren ähnlich. So können Sie 'Place.first.reviews' oder' City.first.reviews' verwenden. – MikDiet

Antwort

1

Ich habe angenommen, Ihre polymorphe Beziehung genannt wurde reviewable Sie können Ihre Bewertungen durch ihre Assoziation Art wie diese Abfrage:

Review.where(:reviewable_type => "Place") # Returns all reviews for 'places' 
Review.where(:reviewable_type => "City") # Returns all reviews for 'cities' 
Review.where(:reviewable_type => "Country") # Returns all reviews for 'countries' 
0

Wenn Sie Ihre Assoziationsverknüpfung in Ihrem Modell gut definieren, müssen Sie nur die Methode aufrufen.

Verwandte Themen