2012-12-24 123 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