非CRUD控制器操作

时间:2009-10-12 14:45:06

标签: ruby-on-rails model-view-controller

这似乎是一个n00b问题,但我试图打破一些我可能已经采用MVC的不良做法,所以我希望你能帮助我

所以,想象一下我想做一些像“上传CSV和解析它”这样的东西,我觉得将它放入CRUD模式似乎并不明显......我没有与数据库交互,所以我不喜欢需要添加或更新或删除,但我仍然希望能够以不同的视图以有意义的方式使用该操作。因此,只需一个名为“UploadCSV”的动作就可以了,并且可以通过诸如“/ data / uploadcsv”之类的URL访问它

非常感谢您的想法!

汤姆

3 个答案:

答案 0 :(得分:1)

这听起来像是在讨论RESTful的想法(包括索引,创建,新建,编辑,更新,销毁,显示等操作)。

在MVC中,您可以根据需要调用一个动作(所以是的,如果需要,可以将其称为uploadcsv)。如果您希望它符合RESTful原则,您可能需要考虑操作正在执行的操作(例如,数据上载本质上是创建或更新函数),并使用其中一个RESTful操作名称命名。

答案 1 :(得分:0)

资源的持久性在这里并不重要。我想你在这里做的是这个 - 从提供的csv中创建某种资源(尽管不是持久的)。这里的问题是考虑这个csv文件代表什么。什么在里面?它是否会成为系统中的资源集合,还是仅代表系统中的一个对象?如果你考虑一下它必须具体的东西。您能更具体地了解您的问题域吗?

答案 2 :(得分:0)

我相信我和你有同样的观点。

在我的项目中,我尽可能地保持尽可能宁静。然而,正如你所说,有时候一个特殊情况并不适合

毕竟这也是'感觉'的问题 如果您提供csv导入功能,我认为不为CSV创建完整的REST实现是完全正确的。

让我们在您的应用程序中想象您有客户。并且您希望为客户提供使用csv导入数据的选项。您可以使用以下方法为此操作添加路线:

map.resources :clients, :member => { :uploadcsv => :get }

路由已正确声明,您的“客户”资源完全是休息状态,并且您已正确声明其他操作以管理数据导入。

我唯一的警告是:不要使用像这样的路由“/ data / uploadcsv”。从我的观点来看,它缺乏清晰度。我希望能够理解我的应用程序将要查看的URL。 '/ data'对我来说太模糊了:))