2016-09-29 66 views
7

我試圖從設計中刪除/禁用「user/sign_up」路徑,我這樣做是因爲我不想隨機訪問應用程序。它已經部分通過增加工作在routes.rb中以下如何從設計中刪除/禁用註冊

Rails.application.routes.draw do 
    devise_scope :user do 
    get "/sign_in" => "devise/sessions#new" # custom path to login/sign_in 
    get "/sign_up" => "devise/registrations#new", as: "new_user_registration" # custom path to sign_up/registration 
    end 

... 

devise_for :users, :skip => :registration 

end 

然而,這打破<%= link_to "Profile", edit_user_registration_path, class: "btn btn-info btn-flat" %>

,我想保留,以便用戶可以更新他們的個人資料。 我知道這是因爲devise_for :users, :skip => :registration

有沒有解決方法對於這個問題?

運行

設計(4.2.0,4.1.1,4.1.0)

的Rails 4.2.5

紅寶石2.3.0p0(2015年12月25日修訂版53290)[x86_64的-linux]

+0

您可以使用'skip :::registerable'並只添加您想要的路線。 –

+0

@AndreyDeineko,如果我添加'skip::registerable',它將激活'users/sign_up'。我如何防止這種情況發生? –

+0

devise wiki [這裏](https://github.com/plataformatec/devise/wiki/How-Tos)對於各種事物都非常有用(我用它來設置我的網站只允許一個用戶) – MageeWorld

回答

8

溶液從設計除去sign_up路徑

輸入以下在開頭

Rails.application.routes.draw do 
    devise_scope :user do 
    get "/sign_in" => "devise/sessions#new" # custom path to login/sign_in 
    get "/sign_up" => "devise/registrations#new", as: "new_user_registration" # custom path to sign_up/registration 
    end 

...經過上面的語句,添加在routes.rb

devise_for :users, :skip => [:registrations] 
    as :user do 
    get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration' 
    put 'users' => 'devise/registrations#update', :as => 'user_registration' 
    end 

這將刪除以下以下/禁用設計出user/sign_up路徑不破壞edit_user_registration_path

重新啓動服務器導軌它應該工作。

2

由於as只是爲devise_scope一個別名,你可以把所有在僅一個街區。

devise_for :users, skip: [:registrations] 
as :user do 
    get "/sign_in" => "devise/sessions#new" # custom path to login/sign_in 
    get "/sign_up" => "devise/registrations#new", as: "new_user_registration" # custom path to sign_up/registration 
    get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration' 
    put 'users' => 'devise/registrations#update', :as => 'user_registration' 
end 
14

最簡單的方法是僅僅取消「:可註冊」從定義到模型(用於應用程序的用戶類的名稱,通常用戶)默認列表設計模塊。

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    ... 
end 

所以你必須像這樣:

class User < ActiveRecord::Base 
    devise :database_authenticatable, 
     :recoverable, :rememberable, :trackable, :validatable 

    ... 
end 
+0

它立即消除了路線,它會很好,它也會在創建視圖時跳過註冊文件夾。但是你只需要刪除那個。沒有人可以在該網站註冊。這對於控制管理員來說非常適合。 – Dieglock

0

我有同樣的問題。我的解決辦法是這些答案的混合:

首評/刪除:registerableuser.rb

class User < ActiveRecord::Base devise :database_authenticatable, #:registerable, :recoverable, :rememberable, :trackable, :validatable end 二去除routes.rb

devise_for :users, :skip => [:registrations] , controllers: { sessions: 'users/sessions' }

現在從設計出登記路徑設計將跳過所有註冊鏈接從他們的視圖,也不再有您的路線註冊路徑。