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.

Foi útil?

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
scroll top