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