У меня есть приложение Rails с несколькими моделями-представлениями-контроллерами, которые имеют некоторые сходные характеристики, например, 5 разных моделей можно комментировать, голосовать или отмечать, я также активно использую внешние плагины.
На данный момент я представил комментарии, голоса, теги и т. Д. Только к одной модели (и ее представлению и контроллеру). Однако теперь, когда я доволен результатами, я хочу исключить эту общую функциональность из определенного MVC одной модели и разрешить доступ к нему из всех других моделей.
Несколько вопросов, прежде чем я начну это делать (и, возможно, некоторые общие советы также будут полезны):
1 - Как мне это сделать? Я думал о создании модуля в директории "lib" (это то же самое, что и класс mixin?), А затем о переносе кода многократного использования в общие части. А как насчет кода контроллера?
2 - Поскольку я только изучал Ruby on Rails во время кодирования первой модели, я выбрал, вероятно, неправильный способ добавления нескольких методов в контроллер. У меня есть метод, который добавляет комментарий (addcomment), добавляет голосование (addvote) и т. Д. Все эти методы требуют нестандартной (не RESTful) маршрутизации через: collection. Насколько я понимаю, правильным способом было бы перенести функциональность контроллера комментариев на собственный контроллер и получить доступ по стандартным маршрутам RESTful. Это то, что я должен делать?
3 - Многие плагины (например, act_as_commentable) явно не требуют загрузки модуля, просто строка "act_as_commentable" где-то в модели. Могу ли я использовать что-то подобное для моей общей функциональности? Как это работает?