ruby on rails: полиморфная ассоциация

Является ли imageable моделью в руководстве по Ruby on Rails? И есть ли у imageable таблица базы данных?

Как imageable_id указывает на два разных атрибута id для Сотрудника и Продукта?


person Jason Kim    schedule 12.10.2012    source источник


Ответы (3)


Нет, на странице, на которую вы ссылаетесь, imageable представляет собой полиморфную ассоциацию либо с Сотрудником, либо с Продуктом. Для того, чтобы полиморфная ассоциация работала, рельсам необходимо будет определить «тип» объекта (т. е. «Сотрудник» или «Продукт»), просмотрев запись «imageable_type» в базе данных, а затем идентификатор соответствующего объекта (imageable_id ).

Например, запись в базе данных imageable_type => «Сотрудник» и imageable_id => «4». ActiveRecord обнаружит, что ассоциация связана с идентификатором 4 в таблице сотрудников.

person ilan berci    schedule 12.10.2012
comment
Хорошо, я понял, откуда взялось мое непонимание. Я думаю, что полиморфную ассоциацию можно использовать для случаев, когда модель изображения принадлежит Сотруднику и Продукту одновременно. Не по одному. - person Jason Kim; 12.10.2012

imageable_type помогает рельсам понять, к какому классу принадлежит модель. При создании модели, если вы используете imageable:references, то rails автоматически создаст столбцы imageable_id и imageable_type в вашей миграции.

person Community    schedule 21.11.2012

Imageable не является моделью. Это заполнитель для какой-то модели (в данном случае это Сотрудник или Продукт).

То, как imageable_id может указывать на разные типы идентификаторов, заключается в том, что Picture также имеет атрибут imageable_type. Для данного экземпляра Picture он знает, какой тип идентификатора imageable_id представляет, глядя на его imageable_type.

person Jacob Mattison    schedule 12.10.2012