:source_type
se ocupa de las asociaciones que son polimórficas. Es decir, si tiene una relación como ésta:
class Tag < ActiveRecord::Base
has_many :taggings, :dependent => :destroy
has_many :books, :through => :taggings, :source => :taggable, :source_type => "Book"
has_many :movies, :through => :taggings, :source => :taggable, :source_type => "Movie"
end
class Tagging < ActiveRecord::Base
belongs_to :taggable, :polymorphic => true
belongs_to :tag
end
class Book < ActiveRecord::Base
has_many :taggings, :as => :taggable
has_many :tags, :through => :taggings
end
class Movie < ActiveRecord::Base
has_many :taggings, :as => :taggable
has_many :tags, :through => :taggings
end
A continuación, el tipo de fuente le permite hacer consultas como esta:
"ME Encontrar todos los libros que han sido etiquetados con la etiqueta llamado 'diversión'"
tag = tag.find_by_name('Fun')
tag.books
sin tipo de fuente, que no sería capaz de hacer eso, sólo se podía obtener una colección de objetos que fueron marcados con 'diversión'. Si solo especificas la fuente, no sabría qué clase de clase eran los objetos, por lo que no sabrías en qué tabla del DB extraer. El source_type
le informa de qué tipo de objeto está tratando de recuperar.
Esto está tomado de esta entrada del blog: http://www.brentmc79.com/posts/polymorphic-many-to-many-associations-in-rails
espero que ayude.
Esta es una buena explicación. ¿Sería capaz de enviar un parche al proyecto docrails explicándolo de la misma manera? http://github.com/lifo/docrails. –
¡Gracias! ¡He estado buscando esto por mucho tiempo! –
Quiere decir que no sabría qué tipo de clase para una unión en una relación. Resolvería el tipo de clase de 'taggings.map {| link | link.taggable} ' –