Rails relation polymorphe dans l'autre sens
-
22-09-2019 - |
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.
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