我希望你能帮助我。
我有一个模型User
和两个控制器UserController
和AdminController
。我还有另一个名为Article
的模型(和ArticleController
)。此外,我在这些模型之间也有一些关系。
class User
...
has_many :articles
end
我需要我的路线看起来像这样:
resources :admin do
...
resources :articles do
end
end
resources :users
...
resources :articles do
end
end
因此,我需要普通用户和管理员都可以创建,列出和删除文章。因为ArticleController
我只有一个创建,销毁,编辑和更新功能,我怎样才能达到我想要的效果? 。该协议是在普通用户创建文章后,需要将其发送到User
个视图中的特定视图,如果Admin
创建了文章,则需要重定向到Admin
中的特定视图{1}}视图,所有这些都可以通过在IF
函数中放置一些create
子句来完成,具体取决于之前的url。这是正确的,这是一个好习惯。也许我应该在Article文件夹中创建所有这些视图?我想出的另一件事是在create
中创建不同的ArticleController
函数,在编辑,新函数和更新函数中创建相同的函数。
也许问题有点傻,但我是Ruby的新手。
提前致谢
答案 0 :(得分:2)
使用两个控制器。
在您的controllers目录中创建一个名为admin
的子文件夹,并在其中创建一个名为Admin::ArticlesController
的控制器。这允许您将所有与管理员相关的操作放在特定位置,并将所有与用户相关的操作放在另一个位置。
Rails指南中有关于命名空间控制器的更多信息:http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routing
答案 1 :(得分:1)
<强>命名空间强>
要扩展David Underwood
的答案,您可能希望在您的应用中使用namespacing
这可以通过引导Rails在特定的module
中寻找namespace
前置控制器,如下所示:
#config/routes.rb
namespace :admin do
resources :articles, only: :show #-> domain.com/admin/articles/15
end
这导致Rails在以下位置查找articles
控制器:
#app/controllers/admin/articles_controller.rb
class Admin::ArticlesController < ApplicationController
end
-
这将允许您定义仅在admin
命名空间中发生的操作,从而使您能够创建/编辑/更新所需的各种记录
我认为这是您需要的一般答案。关于在控制器之后将用户发送到不同视图,您将能够在两个控制器中使用redirect_to
我们使用命名空间在我们的应用中创建admin
区域