2012-12-24 115 views
0

现在,我设置了我的嵌套路由这样 但在这种情况下,我应该如何设计嵌套url?

  • example.com/shop/walmart/topic/1 < =如果我创建一个话题第一次
  • example.com/shop/bestbuy/topic/2 < =如果我创建一个话题第二时间
  • example.com/shop/walmart/topic/3 < =如果我创建一个话题第三次

尽管只有2个记录属于沃尔玛店
的ID将显示为“3”
的事实,我怎样才能让这个ID作为计数的风格?我应该准备另一列吗?

resources :communities, :path => "shop", do 
resources :community_topics, :path => "topic", :as => :'topic' 
end 

回答

1

真的问题,如果在URL中的数字是记录的id?如果这对您很重要,您可以创建一个类似于您的店铺中的“slumart”“walmart”,“bestbuy”等。您必须在主题表格中创建一个新列并使用before_create过滤器来增加该值。事情是这样的:

class Topic 
    before_validation :increment_slug, :on :create 
    validates_uniqueness_of :slug, scope: :shop_id 

    private 
    def increment_slug 
    self.slug = Topic.where("shop_id = ?", shop_id).order("slug DESC").limit(1).slug + 1 
    end 
end 

确保“塞”这里是一个数字字段,所以+和排序工作正常。

+0

感谢您的回答!我想问你哪种方式更常见的做法?开发者通常不关心,也不会做这种特殊的事情? – MKK

+1

通常不会。我们的应用中有一些嵌套的路由,但我们只是让路由中包含'id'。一个客户永远不会在乎'/ bestbuy/topics/4'有一个页面,但'/ bestbuy/topics/5'是一个404,即使有'/ bestbuy/topics/6'。我只是想用默认的使用'id'的rails惯例,除非有一些非常具体的商业原因需要替代行为。 – nzifnab

+0

感谢您通过您的应用程序的示例进行解释。再次感谢!!我欣赏! – MKK