我移植了大量的PHP应用Rails和我们有一个公平一些“临时”的资源,如管理员需要登录与他们权限的其他用户,以纠正问题的能力等我总是会抱怨说,像其他用户一样登录的功能不应该作为动作loginAsUser
和logOutOfUserAccount
捆绑到一个巨大的单片式AdminController
中。在我们的Rails应用程序中,我们尝试尽可能地根据资源进行可视化,所以使用我刚刚给出的示例,我们有一个Admin命名空间,其下有一个UsersController
(/ admin/users /:id)和作为子资源的用户,我们有一个UserOverride
资源(/ admin/users /:user_id/override)......感觉真的合乎逻辑,我们只是POST和DELETE到这个资源。
于是又回到了你的榜样,是的,我想你应该打破这些部分分解成独立的资源。它看起来像BookContent应该是Book的子资源,而MarketingOptions也是。
resources :books do
resource :content
resources :marketing_options
end
等
这既是更好跟(模块化)的工作,更容易刚从看着独自路线可视化。您还可以得到真正的可预见的路径佣工的好处:
<%= link_to("Marketing Options", book_marketing_options_path(@book)) %>
你不能尝试各种可能的途径强行进入一个RESTful资源的思想,但...如果它感觉像它被迫的,那么它可能是。
有一个体面的博客文章,我想链接到(尽管一些语法不好),实际上做了一个相当不错的工作,向你展示如何从资源角度考虑你的应用程序......虽然我找不到它。如果/当我这样做,我会添加评论。
编辑|只需重新阅读你原来的问题,并想澄清:resource!=数据库中的行。资源就是你可以想象成的“事物”......我知道这是一个非常广泛的声明,但就像OOP中的对象不必代表具体/材料,也不需要RESTful设计中的资源。
真是个好问题 - 我一直在想这个问题... – sscirrus 2011-05-28 23:49:32
+1。我宁愿保持他们的安宁,并且在控制器中,但我想看看其他人在做什么。所有的动作也都在控制器中。唯一的例外是嵌套的资源,它们拥有自己的控制器。我目前的项目有一个资源块,有两条收集路线和七条成员路线。 – Preacher 2011-05-29 01:27:50
好奇:你为什么称他们为“毫无意义”(因为他们没有“好”的复数?),你为什么称他们为单身?您是否担心它们与系统内部的对象(例如Book类)不相对应? – 2011-05-29 01:32:31