用于多种用途的模型的轨道控制器的最佳实践

时间:2014-06-14 01:23:25

标签: ruby-on-rails

我希望你能帮助我。 我有一个模型User和两个控制器UserControllerAdminController。我还有另一个名为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的新手。 提前致谢

2 个答案:

答案 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区域