Итак, если у меня есть полиморфная ассоциация в моем приложении, есть ли способ добавить к ней методы? Например, если: post,: photo и: user все связаны с: рейтингом с полиморфной ассоциацией с именем: rankable, могу ли я каким-то образом создать методы: rankable, которые затем будут унаследованы: post,: photo или: user? Я предполагаю, что если это возможно, мне потребуется добавить в приложение модель Rankable и определить методы внутри нее. Это возможно? Если это так, и я прав, когда мне нужно создать модель, какой класс наследует эта модель или как я могу определить ее как полиморфную связь?Как добавить методы к полиморфной ассоциации рельсов?
1
A
ответ
3
Я не знаю, как вы могли бы сделать это с помощью модели, но вы можете легко добавить методы с Mixins:
module RankableMethods
def do_something_useful
...
end
end
class Post < ActiveRecord::Base
include RankableMethods
belongs_to :rankable, :polymorphic = true
end
p = Post.new
p.respond_to?(:do_something_useful) # true
1
Вы должны отделить понятия «полиморфный», как он применяется к Полиморфная ассоциация ActiveRecord и «полиморфная» в классическом смысле наследования ООП.
Полиморфный тип «Rankable» в первом смысле не существует, кроме как соглашение о базе данных в ActiveRecord, которое позволяет записи в одной таблице ссылаться на записи в нескольких возможных других таблицах. Если вы хотите выразить эту абстракцию более конкретно в своей объектной модели - полиморфизм во втором смысле - вам придется объявить отдельный класс или модуль, которые могут быть объединены или наследованы вашими «Rankable» ActiveRecords.
Смежные вопросы
- 1. Рельсов полиморфной ассоциации accepts_nested_attributes
- 2. рельсов ссылка полиморфной ассоциации
- 3. Рендеринг объектов полиморфной ассоциации рельсов в JSON
- 4. Как добавить фильтр для полиморфной ассоциации?
- 5. Настройка полиморфной ассоциации
- 6. Проверка полиморфной ассоциации?
- 7. Регистрация на полиморфной ассоциации
- 8. Область рельсов из-за отсутствия полиморфной ассоциации has_one
- 9. проверить уникальность полиморфной ассоциации
- 10. ошибка полиморфной ассоциации
- 11. Ошибка полиморфной ассоциации Rails
- 12. тестирование полиморфной ассоциации в рельсах
- 13. переход от двух идентификаторов к полиморфной ассоциации
- 14. вопрос о полиморфной ассоциации
- 15. доктрина полиморфной ассоциации
- 16. Как объединяются ассоциации рельсов?
- 17. Рельсы has_many ассоциации через belongs_to полиморфной ассоциации
- 18. Обновление полиморфной ассоциации в рельсах
- 19. Объекты сегмента в полиморфной ассоциации
- 20. Получить обе стороны полиморфной ассоциации
- 21. Как работают методы объединения рельсов?
- 22. Rails Заполнение полиморфной ассоциации через миграции
- 23. Как проверить модель с полиморфной принадлежностью к ассоциации в изоляции?
- 24. Расширение Полиморфной ассоциации ActiveRecord с операторами JOIN?
- 25. Как добавить ассоциации к модулю?
- 26. Раскрывающийся фильтр для Полиморфной ассоциации nested_attribute
- 27. Ассоциации рельсов has_many: через
- 28. рельсов построить ассоциацию с полиморфной belongs_to объектом
- 29. Должен ли я отказаться от полиморфной ассоциации?
- 30. Rails ActiveRecord has_many: через полиморфной ассоциации