Предположим, что у Вас есть комментарий, который может относится к посту(пользователя), а может относится к статье блога.
тогда у Вас таблица может выглядеть примерно так:
comment_id | parent_id | morph| comment_content | author
где:
comment_id - идентификатор самого коммента
parent_id - идентификатор сущности к которой он относится
morph - тип сущности, к которой относится этот комментарий.
comment_content,
author - тут я думаю понятно
тогда записи могут выглядеть так:
comment_id | parent_id | morph | comment_content | author
---------------------------------------------------------------
1 | 1 | post | бла бла бла | vasya
---------------------------------------------------------------
2 | 1 | article | бла бла бла | vasya
---------------------------------------------------------------
при чем, несмтря на то, что
parent_id у них одинаковый, в первом случае он относится к
id в таблице
post, а во втором к
article
Это и называется полиморфической связью.
пример приведу на фреймворке laravel для php (но ORM там очень схож с Rails, так-что проблем возникнуть не должно)
Модель комментария будет выглядеть приблизительно так:
class Comment extends Eloquent {
public function morph()
{
return $this->morphTo();
}
}
а модели поста и статьи:
class Post extends Eloquent {
public function photos()
{
return $this->morphMany('post', 'morph');
}
}
class Article extends Eloquent {
public function photos()
{
return $this->morphMany('article', 'morph');
}
}
вроде бы ничего не напутал...