【问题标题】:The Rails Way - NamespacesRails 方式 - 命名空间
【发布时间】:2010-09-12 06:18:33
【问题描述】:

我有一个关于如何做“Rails 方式”的问题。对于具有面向公众和管理界面的应用程序,Rails 社区对如何做到这一点的普遍共识是什么?

命名空间、子域还是完全放弃它们?

【问题讨论】:

    标签: ruby-on-rails namespaces


    【解决方案1】:

    实际上,管理界面没有真正的“Rails 方式” - 您可以在许多应用程序中找到所有可能的解决方案。 DHH 暗示他更喜欢命名空间(使用 HTTP 基本身份验证),但这仍然是一个简单的暗示,而不是官方的 Rails 意见之一。

    也就是说,我最近发现这种方法很成功(命名空间 + HTTP Basic)。它看起来像这样:

    routes.rb:

    map.namespace :admin do |admin|
      admin.resources :users
      admin.resources :posts
    end
    

    admin/users_controller.rb:

    class Admin::UsersController < ApplicationController
      before_filter :admin_required
      # ...
    end
    

    应用程序.rb

    class ApplicationController < ActionController::Base
      # ...
    
      protected
      def admin_required
        authenticate_or_request_with_http_basic do |user_name, password|
          user_name == 'admin' && password == 's3cr3t'
        end if RAILS_ENV == 'production' || params[:admin_http]
      end
    end
    

    authenticate_or_request_with_http_basic 上的条件会在生产模式下或当您将 ?admin_http=true 附加到任何 URL 时触发 HTTP 基本身份验证,因此您可以在功能测试中对其进行测试,并在浏览开发站点时手动更新 URL。

    【讨论】:

    • 我讨厌这个。路线的名称如下:“new_admin_user_path”。这是管理员创建新用户的操作,而不是创建新管理员用户。它应该被称为“admin_new_user_path”。丑陋的。这让我怀疑我将命名空间用于错误的事情。
    【解决方案2】:

    在一些较小的应用程序中,我认为您不需要分离管理界面。只需使用常规界面并为登录用户添加管理功能。

    在更大的项目中,我会使用命名空间。由于某种原因,我觉得使用子域不合适。

    【讨论】:

      【解决方案3】:

      感谢所有回答我问题的人。如果您愿意,似乎共识是使用命名空间,因为没有 DHH 赞助的 Rails Way 方法。 :)

      再次感谢大家!

      【讨论】:

        【解决方案4】:

        回复肯定晚了,但我真的很需要这个问题的答案:如何轻松地做管理区域?

        这是现在可以使用的:Active Admin,与Ryan Bates's great intro

        【讨论】:

          猜你喜欢
          • 2016-06-17
          • 1970-01-01
          • 2012-10-24
          • 2013-12-06
          • 2011-03-12
          • 1970-01-01
          • 2013-04-12
          • 2017-03-21
          • 2014-05-19
          相关资源
          最近更新 更多