Ответ 1
:source_type
имеет дело с ассоциациями, которые являются полиморфными. То есть, если у вас есть такие отношения:
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
Затем тип источника позволяет делать такие запросы:
"Найдите все книги, которые были помечены тегом с именем" Fun ".
tag = tag.find_by_name('Fun')
tag.books
Без типа источника вы не сможете этого сделать, вы можете получить только коллекцию объектов, помеченных как "Fun". Если вы только специфицировали источник, он не знал бы, какой класс был для объектов, поэтому вы не знаете, какую таблицу в БД вытащить. source_type
Сообщает об этом типе объекта, который вы пытаетесь выполнить.
Это взято из этого сообщения в блоге: http://www.brentmc79.com/posts/polymorphic-many-to-many-associations-in-rails
Надеюсь, что это поможет.