Pregunta

Después de haber configurado mi relación polimórfica de esta manera:

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

Me puede hacer Wine.last.reviews y Beer.find (3) .reviews etc ...

Lo que estoy strugling que hacer es ir en la otra dirección, es decir, digamos que quiero encontrar los últimos 10 comentarios de vino y los últimos 10 comentarios de la cerveza.

¿Fue útil?

Solución

La forma más sencilla de hacer esto es probablemente para añadir un ámbito llamado a su modelo Review que especifica la columna de la reviewable_type.

Al igual que:

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 esa manera usted tiene la flexibilidad de la determinación del alcance, cuando la búsqueda de sus resultados ...

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

etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top