Rails Relacionamento polimórfico na outra direção
-
22-09-2019 - |
Pergunta
Tendo configurado meu relacionamento polimórfico como assim:
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
Eu posso fazer wine.last.Reviews e Beer.Find (3) .Reviews etc ...
O que estou me esforçando é seguir na outra direção, ou seja, digamos que eu quero encontrar os últimos 10 comentários para o vinho e as últimas 10 críticas para a cerveja.
Solução
A maneira mais fácil de fazer isso provavelmente é adicionar um escopo nomeado ao seu Review
modelo que especifica o reviewable_type
coluna.
Igual a:
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
Dessa forma, você tem a flexibilidade de escopo ao encontrar seus resultados ...
Review.for_wines.approved.all
Review.for_beers.active.find(:all, :order => 'created_at')
etc.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow