2015-02-10 81 views

回答

3

如何使用永久鏈接而不是用戶ID?即用戶/ [永久鏈接]和可以配置永久鏈接任何你喜歡的,只要它是一個唯一的值

結帳的friendly_id寶石:https://github.com/norman/friendly_id

+0

使用隨機(或僞隨機)生成的唯一ID(friendly_id可以讓你輕鬆做到)是我想的方法,如果你不想讓人們能夠猜測用戶ID(這是我認爲你所有你的數據庫關聯仍然會使用id,這只是使用隨機查找slug的url。 – 2015-02-10 16:06:09

+0

是的,我想隱藏user_id – 2015-02-11 06:56:11

0

Rails使用to_param方法在URL顯示對象時。

如果更改to_param方法user它將用於顯示數據而不是id

默認情況下,rails已經實現to_param來返回對象的id

例如

class User < ActiveRecord::Base 
    ... 
    def to_param 
    "#{self.first_name}-#{self.last_name}" # or whatever you want to use 
    end 
    ... 
end 

在你的網址,你將有/users/first_name-last_name或任何你to_param方法返回。默認to_param返回id和在url你得到/users/4。並在您的控制器中可以找到userid 4,但是當您更改to_param方法時,必須分別更改從數據庫中獲取用戶的方式。

例如: 我更改我的to_param方法從數據庫返回nick_name,它對於特定用戶是唯一的,我可以使用它從數據庫中查找用戶。 在路由器

變化爲params

get 'users/:nick_name', 'users#show' 

在控制器

User.find_by :nick_name => params[:nick_name] 
+0

好吧,當我在用戶中添加此方法時模型,我得到一個錯誤「無法找到用戶與'ID'=一些用戶」,無論如何修復? – 2015-02-11 06:55:19

+0

你需要獨特的價值與'to_param'方法返回,因爲你會用它來找到用戶在數據庫。現在你的路由是'/ users/some-user',但是如何確定哪個用戶是誰,你需要一些獨特的參數來鏈接到特定的用戶 – Nermin 2015-02-11 08:08:13

+0

現在我很困惑QQ – 2015-02-11 09:33:24

0

其他人一樣在這個帖子裏說,我使用 映射我使用 https://github.com/norman/friendly_id這樣:

# app/models/secret.rb; this would go in the model you want to obfuscate 
    class Secret < ActiveRecord::Base 
    has_friendly_id :code, :use_slug => true 

    validates :name, :uniqueness => true 

    def code 
     Digest::SHA1.hexdigest self.name 
    end 
    end 

很簡單。如果你的安全需求是嚴重的,你可能會想要一些更復雜的東西(更不用說比基本的混淆技術更分層了),但我想分享一個開箱即用的方式來使用已存在的gem (甚至可能已經在您的應用程序中使用)