2012-12-24 4 views
0

Pour l'instant, je suis la mise en place de mon routage imbriqué comme celui-ci Mais dans ce cas,Comment devrais-je créer une URL imbriquée?

  • example.com/shop/walmart/topic/1 < = si je crée un sujet première fois
  • example.com/shop/bestbuy/topic/2 < = si je crée un sujet deuxième fois
  • example.com/shop/walmart/topic/3 < = si je crée un sujet troisième fois

Malgré le fait qu'il n'y a que deux documents qui appartiennent à walmart boutique
L'ID sera présentée comme « 3 »
Comment puis-je faire de cet ID compter jusqu'à style? Dois-je préparer une autre colonne ou quelque chose?

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

Répondre

1

-t-il vraiment importe si le nombre dans l'URL est le id du dossier? Si cela vous intéresse, vous pouvez créer un slug similaire à votre slug shop "walmart", "bestbuy", etc. Vous devrez créer une nouvelle colonne dans le tableau des rubriques et utiliser un filtre before_create pour incrémenter cette valeur . Quelque chose comme ceci:

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 

Assurez-vous que « limaces » est ici un champ numérique de sorte que le + et le travail de tri correctement.

+0

Merci pour la réponse! Je veux vous demander quel est le moyen le plus commun de faire ??? Le développeur ne s'en soucie généralement pas et ne fait jamais cette transcation spéciale? – MKK

+1

Pas habituellement. Nous avons quelques routes imbriquées dans nos applications mais nous laissons simplement ce 'id 'être sur la route. Un client ne se souciera jamais que '/ bestbuy/topics/4' a une page mais'/bestbuy/topics/5' est un 404 même s'il y a '/ bestbuy/topics/6'. Je voudrais juste aller avec la convention des rails par défaut d'utiliser un 'id' là personnellement, sauf s'il y a une raison commerciale très spécifique que vous souhaitez un comportement alternatif. – nzifnab

+0

Merci pour l'explication avec un bon exemple de votre application. Merci encore!! J'apprécie!! – MKK

Questions connexes