2010-02-26 4 views
2
class Content < ActiveRecord::Base 
    has_friendly_id :title, :use_slug => true 
end 

Comment puis-je faire un lien comme/about-us au lieu de/contents/about-us?friendly_id/content_url sans portée

Dois-je modifier la méthode content_url ou y a-t-il une meilleure approche?

Répondre

0

OK, refaire cette réponse. J'ai regardé ceci un peu plus en incluant le plugin de has_friendly_id, semble gentil, mais n'ai pas utilisé cela auparavant. J'ai un peu roulé mes propres méthodes pour faire des liens amicaux dans le passé.

Je pense que je comprends maintenant ce que vous demandez ... chaque titre dans votre table de contenu, vous voulez une URL conviviale, et vous voulez que cette URL commence à / (root), pas sous /content. Je ne vois pas de moyen immédiat de le faire avec friendly_id, mais c'est OK, routes.rb le fait assez facilement.

Modifier routes.rb pour faire content votre root:

map.root :controller => 'content' 

Je pense que plusieurs appels map.root peuvent être, cela dépend de l'ordre s'il y a des collisions. Sinon, il est juste un alias de toutes sortes pour

map.connect '', :controller => 'content' 

Bonne chance!

+0

Je veux dire que j'ai un modèle avec le titre « sur nous » , Je ne veux pas modifier le fichier config/routes chaque fois qu'un nouveau modèle est ajouté à la base de données – astropanic

+0

J'ai mieux répondu à ma réponse. Si vous avez besoin de plus de précisions, faites le moi savoir.Il semble que vous soyez un peu confus sur le but des routes puisque vous continuez à mentionner un modèle. Les "chemins", ou "liens", correspondent réellement à un contrôleur et à une action. Le modèle est ensuite accédé par la méthode d'action nommée dans votre contrôleur. Je ne connais pas de moyen d'acheminer directement vers un modèle. S'il y a un moyen, ce n'est certainement pas la façon dont les rails sont censés fonctionner. – dpb

+0

Je sais comment le routage des rails fonctionne et je connais le mécanisme de commande d'action, mais je veux que de tels liens soient sur http://ministerstwogadzetow.com par exemple, regardez les deux liens http://www.ministerstwogadzetow.com/wyciagarka-do- slodyczy.html - cela pointe vers l'action de show de contrôleur de produits et celui-ci http://www.ministerstwogadzetow.com/zegary-i-zegarki.html pointe vers l'action de show de contrôleur de catégorie (moteur de php), comme vous pouvez le voir, il y a non/categories/quelque chose ou/produits/quelque chose et c'est ce que je veux – astropanic

3

Je viens de le faire pour un site sur lequel je travaille.

Il s'agit en fait de spécifier les routes correctes.

En tant que votre modèle est appelé contenu, je suppose que vous avez déjà cartographié contenu comme une ressource comme celui-ci (dans votre routes.rb):

map.resources :content 

Cela se chargera urls comme:

http://example.com/content/my-special-content-page

Pour gérer urls comme:

http://example.com/my-special-content-page

il vous suffit de cartographier les routes comme ceci:

map.content '/:id', :controller => 'content', :action => 'show' 

Note:

Routes fonctionnent de haut en bas, de sorte que vous aurez besoin de mettre ce en dessous de la plupart des choses. Surtout le:

map.root :controller => "welcome" 

Si vous mettez votre nouvel itinéraire ci-dessus, vous vous retrouverez avec une erreur, car il va tenter appeler l'action Controller.show avec: id nul.

Vous aurez également besoin d'assurer chaque fois que vous générez dans vos urls vues que vous aurez besoin d'utiliser cette nouvelle route comme ceci:

= link_to "My Special Page", content_path(@content) 
+0

Pas exactement ce que je veux, mais une bonne solution. Que dois-je faire si j'ai deux modèles ou plus, non seulement le contenu, mais aussi le produit et la photo? – astropanic