我有一个带有几个模型-视图-控制器的 Rails 应用程序,它们具有一些相似的特征,例如可以评论、投票或标记 5 个不同的模型,我也大量使用外部插件。
目前我只对单个模型(及其视图和控制器)引入了评论、投票、标签等。但是,既然我对结果感到满意,我想从一个模型的特定 MVC 中删除这个通用功能,并允许从所有其他模型访问它。
在我开始这样做之前的一些问题(也许一些一般性的建议也会很好):
1 - 我应该怎么做?我正在考虑在“lib”目录中创建一个模块(它与 mixin 类相同吗?),然后将可重用的视图代码移动到常见的部分。控制器代码呢?
2 - 因为我在第一个模型的编码过程中刚刚学习 Ruby on Rails,所以我采用了一种可能不正确的方式,将一堆方法添加到控制器中。我有一个添加评论(addcomment),添加投票(addvote)等的方法。所有这些方法都需要通过:collection 进行非标准(非RESTful)路由。据我了解,正确的方法是将注释控制器功能移至其自己的控制器并通过标准 RESTful 路由访问。这是我应该做的吗?
3 - 许多插件(例如act_as_commentable)并不明确要求加载模块,只是模型中某处的一行“act_as_commentable”。我可以将这样的东西用于我的常用功能吗?它是如何工作的?