Question

Après avoir mis en place ma relation polymorphes comme ceci:

class Review < ActiveRecord::Base
  belongs_to :reviewable, :polymorphic => true
  belongs_to :user
end

class Wine < ActiveRecord::Base
  has_many :reviews, :as => :reviewable
end

class Beer < ActiveRecord::Base
  has_many :reviews, :as => :reviewable
end

Je peux faire Wine.last.reviews et Beer.find (3) .reviews etc ...

Qu'est-ce que je strugling à faire est d'aller dans l'autre sens, à savoir disons que je veux trouver les 10 derniers commentaires pour le vin et les 10 derniers commentaires pour la bière.

Était-ce utile?

La solution

La meilleure façon de le faire est sans doute d'ajouter un champ nommé à votre modèle Review qui spécifie la colonne reviewable_type.

comme ceci:

class Review < ActiveRecord::Base
  belongs_to :reviewable, :polymorphic => true
  belongs_to :user

  named_scope :for_wines, :conditions => { :reviewable_type => 'Wine' }
  named_scope :for_beers, :conditions => { :reviewable_type => 'Beer' }
end

De cette façon, vous avez la possibilité de cadrage lors de la recherche de vos résultats ...

Review.for_wines.approved.all
Review.for_beers.active.find(:all, :order => 'created_at')

etc

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top