它是一個不好的做法,讓用戶的數據庫ID在這樣的網址:Rails - 糟糕的做法離開數據庫ID在網址?
localhost:3000/users/16/edit
如果它是壞的,我怎麼能隱藏在URL中的ID?在我的視圖中調用路徑時,我需要注意什麼,routes.rb等?
如果這是相關的討論中,用戶資源看起來像這樣在我的routes.rb:
resources :users, only: [:new, :edit, :create, :update]
它是一個不好的做法,讓用戶的數據庫ID在這樣的網址:Rails - 糟糕的做法離開數據庫ID在網址?
localhost:3000/users/16/edit
如果它是壞的,我怎麼能隱藏在URL中的ID?在我的視圖中調用路徑時,我需要注意什麼,routes.rb等?
如果這是相關的討論中,用戶資源看起來像這樣在我的routes.rb:
resources :users, only: [:new, :edit, :create, :update]
只需覆蓋的ActiveRecord :: Base的子類to_param
class User < ActiveRecord::Base
validates_uniqueness_of :name
def to_param #overriden
name
end
end
然後對其進行查詢像這樣
user = User.find_by_name('Phusion')
user_path(user) # => "https://stackoverflow.com/users/Phusion"
或者,您可以使用寶石friendly_id
雖然您可以使用友好的ids,如鷹和RailsCast #314: Pretty URLs with FriendlyId,在您的路線中使用主鍵是標準做法,甚至可能是最佳做法。您的主鍵可確保每次調用「/ posts/1/edit」時正在獲取正確的記錄。如果你使用slu,,你必須確保這個非常獨特的slu yourself!
在您的具體情況下,似乎您正在構建某種「編輯配置文件」功能。如果每個用戶只編輯他或她自己的配置文件,則可以路由Singular Resource。
Possible routes:
/profile # show profile
/profile/edit # edit profile
然後,您的用戶的主鍵將不會從URL中可見。在所有其他模型中,我寧願使用URL中的id。
如果我改變了它在我的路線,'得到「個人資料」,到:'users#edit'',我仍然會在我的url helper中調用edit_user_path(@user)嗎? – user2345093
在終端中運行'rake routes'來查看當前定義的路線。請參閱[命名路線](http://guides.rubyonrails.org/routing.html#naming-routes)以添加或覆蓋名稱。 –
根據您的路線,它看起來像您的用戶將不會公開可見的配置文件。如果是這種情況,那麼您可以簡單地將example.com/settings
用於用戶#編輯並將example.com/sign_up
用於用戶#新。
get 'settings', to: 'users#edit'
get 'sign_up', to: 'users#new'
resource :users, path: '', only: [:create, :update]
如果您的用戶的確會在未來公開可見的配置文件,然後你可以使用friendly_id寶石的建議由鷹或者一個隨機的7位ID創建記錄之前將其覆蓋。一些研究之後,我這是怎麼弄成這樣做:
before_create :randomize_id
private
def randomize_id
self.id = loop do
random_id = SecureRandom.random_number(10_000_000)
break random_id unless random_id < 1_000_000 or User.where(id: random_id).exists?
end
end
如果你覺得在顯示數據庫ID風險,然後用'slugify' –