Question

J'ai vue pour un contrôleur appelé « show ». A l'intérieur ce point de vue, je veux rendre le contenu de la vue d'un autre contrôleur - et évidemment, la logique de la forme sur ce point de vue de parler au contrôleur, il appartient aussi. Comment puis-je faire cela? Je suis assez nouveau sur les rails et je ne suis pas confiant à 100% avec le cadre encore.

On pourrait presque les considérer comme « widgets » sur la vue. Je sais que vous pouvez rendre les actions du même contrôleur sur la vue en utilisant:

render :action => "show_home_page", :layout=> false

mais je besoin de rendre l'action (vue) d'un autre contrôleur.

ie.

  

J'ai vue, ce qui est   rendu sur une mise en page. Ce point de vue,   appartient au contrôleur A.   Je dois rendre le « index » et « nouveau »   vue depuis l'intérieur de l'unité de commande B affichage d'origine (ci-dessus)

.

Était-ce utile?

La solution

La terminologie dans votre question est un peu confus. Si êtes dans un contrôleur et que vous voulez exécuter le code dans une autre méthode d'action dans un autre contrôleur et affichera le modèle, vous devez redirect_to cette action. Disons que l'autre contrôleur est appelé ContractsController

redirect_to :controller => "contracts", :action => "show_home_page"

Si vous voulez juste utiliser le modèle de vue d'une autre méthode que la réponse de votre action, il vous suffit de préfixer le nom du contrôleur dans le paramètre de rendu. Ce ne sera pas appeler l'action, il suffit d'utiliser son modèle.

Par exemple, si le modèle vit dans le dossier pour le contrôleur de contrats.

render :action => "/contracts/show_home_page", :layout=> false

Je pense que dans ce cas, vous parlez en fait d'un partiel qui ressemblerait

render :partial => "/contracts/show_home_page"

Cependant, ce que je vois que vous saisir ici est que vous voulez vraiment appeler plusieurs méthodes d'action pour rendre une seule page. Ce n'est pas comment cela fonctionne. Vous allez devoir mettre en place les objets que les modèles référencera en une seule action. Ceci est une des raisons pour la plupart des développeurs Rails mis beaucoup de code dans les modèles, de sorte que la configuration ne se répète pas tous sur les contrôleurs.

Mais il y a une autre façon ... où la magie de JavaScript entre en jeu.

Dans votre page, créez une fonction comme ceci:

<script type="text/javascript" language="javascript">    
function load_categories() {
            <%= remote_function(:url => {:controller => "categories", :action => "list"},
                                  :update => "categories")%>
        };
</script>

Si vous appelez cela dans le onload même de votre page, il remplacera le div id avec « catégories » de la réponse de l'action référencée.

Autres conseils

Si vous voulez vraiment rendre tout à fait une autre action (simulant une demande de passer par l'ensemble de Ruby on Rails pile), vous pouvez utiliser Webrat (consultez Webrat screencast ici).

Dans les applications Web traditionnelles MVC, vous devriez rarement avoir besoin de le faire. Mais dans mon expérience dans le développement de style SOFEA et webapps micro-architecture , cela devient de plus en plus fréquents.

Je ne suis pas sûr que je comprends votre bien (pourquoi cela doit être fait à partir de la vue) énoncé du problème, mais je dirais que vous appelez simplement redirect_to du contrôleur A au contrôleur B.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top