一個namespace
是你的控制器模塊的等價性。
簡單地說,你就必須做到以下幾點:
- Put your namespaced controllers into a subdirectory of the same name
- All your routes need to be sent through the namespaced helpers
這裏是如何做到這一點:
命名空間
你會在最佳位置通過閱讀namespacing from the Rails documents
我F你要拍的「admin」的命名空間,你會做以下的(我們用這個):
#config/routes.rb
namespace :admin do
root "products#index"
resources :products, only: [:new, :create]
resources :customers, only: [:new, :create]
end
resources :products, only: [:index, :show]
resources :customers, only: [:index, :show]
這將創建一個號碼,你的路線;但那些命名空間將只提供
下面是如何構建你的控制器:
#app/controllers/admin/application_controller.rb
class Admin::ApplicationController < ActionController::Base
before_action :authenticate_user!
end
#app/controllers/admin/products_controller.rb
class Admin::ProductsController < Admin::ApplicationController
def index
@products = Product.all
end
end
這將爲您提供一個唯一的身份驗證區域來提供接入創造Product
和Category
對象。
如果你想路由到這些控制器,你需要使用所提供的命名空間的路線:
<%= link_to "New Product", admin_product_path if user_signed_in? %>
你能後你有確切的錯誤? – fivedigit 2014-08-29 21:06:31
確切的錯誤是:'未定義的方法'電子郵件爲零:NilClass'這是由模板觸發(一個'@用戶'傳遞給模板)。傳遞的參數是:{「id」=>「customers」}在訪問/ admin/customers時告訴我路由未被識別 – WagnerMatosUK 2014-08-29 22:35:08
檢查此鏈接。它真的幫助我理解http://blog.roberteshleman.com/2014/08/14/using-rails-namespaces-for-admin-actions/ – ryanb082 2015-09-23 14:35:11