创建仅具有索引操作的控制器是一种好习惯吗?

时间:2017-08-29 17:53:37

标签: ruby-on-rails ruby-on-rails-5

我即将创建一个管理页面(/ admin),并试图找出解决此问题的最佳方法。我发现的所有解决方案似乎都太复杂了(管理页面只有一个目的就是编辑其中一个资源)。只有一个动作的控制器似乎是最简单的解决方案,在执行此操作之前是否还应考虑其他任何选项?

2 个答案:

答案 0 :(得分:3)

有几件事需要考虑。

  • 如果页面用于编辑一个资源,为什么在/admin而不是/<resource>/admin/resource/admin/<resource>/:id?如果需要,您可以使用嵌套路由创建管理命名空间。您甚至可以在路由中命名:admin命名空间,并将admin命名空间中的根设置为特定控制器,而不是创建专用控制器。
  • 为一个动作创建控制器没有任何内在错误,有时它确实有意义。但通常这些页面并不专门用于编辑一种资源 - 它们就像仪表板或特殊功能,不能整齐地映射到资源/模型层次结构中。
  • 如果您发现需要多个静态页面,则通常(根据其他来源的Rails教程)将它们分组到一个控制器中。

如果还没有,可以阅读Rails路由指南(http://guides.rubyonrails.org/routing.html)。

答案 1 :(得分:0)

您可以使用HTTP基本身份验证,并使用带before_action选项的only仅针对您要密码保护的操作触发它。

class ResourceController < ApplicationController
  before_action :authenticate, only: [:admin_edit]

  def admin_edit
    # your action code here
  end

  def authenticate
    authenticate_or_request_with_http_basic do |username, password|
      username == "admin" && password == "admin@123"
    end
  end

end