0

我有一个带有几个模型-视图-控制器的 Rails 应用程序,它们具有一些相似的特征,例如可以评论、投票或标记 5 个不同的模型,我也大量使用外部插件。

目前我只对单个模型(及其视图和控制器)引入了评论、投票、标签等。但是,既然我对结果感到满意,我想从一个模型的特定 MVC 中删除这个通用功能,并允许从所有其他模型访问它。

在我开始这样做之前的一些问题(也许一些一般性的建议也会很好):

1 - 我应该怎么做?我正在考虑在“lib”目录中创建一个模块(它与 mixin 类相同吗?),然后将可重用的视图代码移动到常见的部分。控制器代码呢?

2 - 因为我在第一个模型的编码过程中刚刚学习 Ruby on Rails,所以我采用了一种可能不正确的方式,将一堆方法添加到控制器中。我有一个添加评论(addcomment),添加投票(addvote)等的方法。所有这些方法都需要通过:collection 进行非标准(非RESTful)路由。据我了解,正确的方法是将注释控制器功能移至其自己的控制器并通过标准 RESTful 路由访问。这是我应该做的吗?

3 - 许多插件(例如act_as_commentable)并不明确要求加载模块,只是模型中某处的一行“act_as_commentable”。我可以将这样的东西用于我的常用功能吗?它是如何工作的?

4

2 回答 2

3
  1. 一种简单的方法是将代码拆分为模块并使用 mixin。一个更好的方法是为你的通用代码编写你自己的插件。act_as_commentable 你可以在这里了解它:http: //guides.rubyonrails.org/plugins.html

  2. 正确的方法是做一个评论控制器,并将它嵌套到你的模型中,给出一个像这样的宁静路线:/mymodelname/1/comments。制作此类控制器的一种简单方法是使用inherited_resources 插件。向下滚动到“多态属于”部分 - 有一个评论控制器示例

于 2009-08-22T17:55:37.530 回答
2

对于重复的模型代码,放在 lib 目录下的一个模块中。

对于控制器代码,将您的重复代码放在 ApplicationController 中。

对于您的视图代码,请使用部分。

于 2009-08-22T17:30:50.870 回答