В поле commentable_type необходимо сохранить имя таблицы, содержащей данные, после загрузки этой строки из правой таблицы унаследованный тип будет загружен из типа . столбец в таблице сообщений .
Итак:
Здесь комментарий указывает на таблицу, в которой он комментирует. Стол сообщений, id 1
>> Comment.first
=> #<Comment id: 1, commentable_id: 1, commentable_type: "Post", body: "test", created_at: "2010-04-09 00:56:36", updated_at: "2010-04-09 00:56:36">
Затем для загрузки NewsArticle из сообщений загружается id 1, а тип там указывает на NewsArticle.
>> Comment.first.commentable
=> #<NewsArticle id: 1, type: "NewsArticle", name: "one", body: "body", created_at: "2010-04-09 00:55:35", updated_at: "2010-04-09 00:55:35">
>> Comment.first.commentable.class.table_name
=> "posts"
Если commentable_type удерживается "NewsArticle"
, ему придется взглянуть на класс, чтобы определить таблицу. Таким образом, он может просто смотреть на таблицу и беспокоиться о типе, когда попадет туда.