0

由於mongo不是關係型的,我想知道如何在has_many多態關聯中找到特定類型。mongoid在has_many關聯

我有3種型號,[廣場,市,&國家所有3能有評論(多態)

我怎樣才能返回所有評論與特定模型關聯?我知道如何做一個簡單的has_many關聯,但不是多態的關聯?

通常我會做這樣的事情:

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

但對於一個多態關聯,我失去了什麼?

#@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

爲什麼不使用'@ user.reviews'? – MikDiet 2012-04-06 17:38:19

+0

對不起,也許我不清楚,它不是用戶模型,我只是用它作爲我通常會這樣做的例子(非多態) – ere 2012-04-06 18:34:57

+0

我明白,但多態關聯的工作原理類似。因此,您可以使用「Place.first.reviews」或「City.first.reviews」 – MikDiet 2012-04-06 19:16:39

回答

1

我假定你的多態性關係被命名爲reviewable您可以通過自己的關聯類型這樣的查詢您的評論:

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

如果你在模型中很好的定義了你的關聯關係,你只需要調用這個方法。