2

要提取一定的岗位在我的控制器,你可以在URL查找后没有使用主键

http://0.0.0.0:3000/post/1 
http://0.0.0.0:3000/post/2 
http://0.0.0.0:3000/post/3 

我被要求做,以便它不能获取这种类型是这样的方式,但随机字符串。例如更多的东西是这样的:

http://0.0.0.0:3000/post/wr4t-d2e2-1ee3 
http://0.0.0.0:3000/post/prst-3r4t-1r1r 
http://0.0.0.0:3000/post/asdo-2e12-sxas 

问题 为了做到这一点,我应该创造职位表中的另一列称为“令牌”或“随机”,并使用该列通过find_by获取后?即Post.find_by_token('wr4t-d2e2-1ee3')

关于什么是正确的方式来处理这个问题的任何意见。 我已经在示例,其中应用程序将使用“代理键”“全局唯一标识符”“自然键”令牌随机

读了,我只是有点不知所措最佳实践是什么。

+0

我不认为有什么使用的最佳实践有明确的答案。就我个人而言,我会寻找与你的服务相关的东西:UPC,Isbn,强调博客文章标题等等,重要的细节将为该专栏编制索引。其他人做了什么。 – Ilion 2012-02-09 02:44:50

+0

让我们猜猜,你有一个多租户系统,不希望用户看到其他租户发帖编号 – 2012-02-09 04:15:33

+0

是的,客户不希望这些帖子是如此易于理解和可预测。 (即1,2,3,4,5)以逻辑顺序排列。 – alenm 2012-02-09 05:50:27

回答

2

你所寻找的是这样的:

class Post < ActiveRecord::Base 
    # Permalinks 
    #----------------------------------------------------------------------------- 
    def to_param 
     "#{post.token}" 
    end 
    end 

网址将会像

post_url(@post) 
#http://0.0.0.0:3000/post/wr4t-d2e2-1ee3 

然后,你可以做按正常

Post.find(params[:id]) 

可以生成你的令牌只需使用before_validation回调。

OR

你可以去宝石和使用friendly_id,将您处理该问题,以及产生该蛞蝓的轨迹史。 Th,听起来像是它可能是为了你的要求矫枉过正。