2012-06-18 1 views
0

Encore assez nouveau sur Rails, donc si je prends la mauvaise approche, s'il vous plaît n'hésitez pas à me distendre.Comment créer des routes pour un contrôleur qui ne fait rien avec des modèles dans Rails?

Comment est-ce que je fais savoir à routes.rb qu'il y a un contrôleur de racine plein d'actions qui ne manipulent pas les modèles, tout en préservant les méthodes d'aide d'itinéraire? Je voudrais à répondre à des demandes comme celles-ci:

http://localhost/download 
http://localhost/share 

avec des aides d'itinéraire comme

download_app_path 
share_path 

mais sans routes statiques nommées comme celles-ci:

match '/download' => 'site#download', :as => :download_app 
match '/share' => 'site#share', :as => :share 

d'un SiteController qui doesn Ne créez pas, ne montez pas ou ne manipulez pas les modèles de mon application.

J'ai essayé d'utiliser une approche comme celui-ci, mais il fonctionne sans générer les aides d'itinéraire (naturellement)

match '/:action', :controller => 'site' 

je pourrais théoriquement faire sans les aides de route, mais je pense qu'ils sont un peu plus facile lire plutôt que de passer des hachages d'options url à des méthodes link_to ou form.

Existe-t-il un moyen d'accomplir un contrôleur racine plus ingénieux, ou est ce que j'essaie de faire non conventionnel pour Rails?

Modifier

Pour plus de clarté, voici ce que cette classe SiteController ressemble:

class SiteController < ApplicationController 
    def download 
    @custom_options = { .. } 
    end 
    def share 
    @custom_options = { .. } 
    end 
    def about 
    end 
end 

Son but est de me permettre de collectionne les pages qui n'interagissent avec les ressources (comme les utilisateurs ou Amitiés) dans un seul contrôleur et maintenez-les tous en un seul endroit. J'essaie de configurer ce contrôleur en tant que contrôleur racine de l'application - de sorte que tous les chemins de ce contrôleur seront directement hors de l'hôte de l'application (myapp.com/download)

Merci d'avance!

Répondre

1

Les routes et les ressources ne sont pas liées aux modèles. c'est juste une convention RESTful. si vous voulez juste utiliser les actions de l'indice, dans votre exemple download et share pourrait être fait comme

resouce :download, only: [:index] 
resouce :share, only: [:index] 

voir tous les exemples dans les guides http://guides.rubyonrails.org/routing.html

si vous voulez ajouter le téléchargement et partager les fonctionnalités de une « ressource » comme, par exemple une image, alors vous feriez quelque chose comme:

resources :pictures do 
    get 'download', :on => :member 
    get 'share', :on => :member 
end 

une ressource a toujours et le point final /pictures par exemple. Donc, si vous voulez avoir des chemins directement vers votre hôte, vous devez fournir des filtres personnalisés dans vos itinéraires comme vous l'avez fait dans vos exemples.

+0

Vous semblez suggérer que je casse les actions «télécharger» et «partager» de SiteController.rb et en faire les actions d'index de leurs propres contrôleurs distincts, est-ce exact? En outre, les options: only et: except semblent ne fonctionner que sur les routes par défaut; ils n'exposent pas les actions personnalisées 'download' ou 'share' à routes.rb lorsqu'une requête est entrante, ce qui me ramène à la définition statique d'une route pour obtenir le chemin désiré. – BrMcMullin

+0

Peut-être que je ne comprends pas ce que vous essayez de faire ... y a-t-il une "ressource" que vous voulez fournir pour le téléchargement et le partage? alors vous pourriez faire une approche différente. – phoet

+0

Non, aucune ressource n'est interagi avec ou fournie autrement. Jetez un oeil à mon édition, j'espère que cela permettra de comprendre le rôle de SiteController. – BrMcMullin

Questions connexes