2010-01-08 4 views
2

Je sais que le hachage flash de Rails n'est pas nouveau, mais je continue de rencontrer le même problème.Rails flash violation de hachage de MVC?

Les contrôleurs doivent être destinés à la logique métier et aux requêtes db, et non à la mise en forme des chaînes pour l'affichage à l'utilisateur. Mais le hachage flash est toujours défini dans le contrôleur. Cela signifie que j'ai besoin de bidouiller et de contourner Rails pour utiliser les Helpers que j'ai créés pour formater les chaînes du hachage flash.

Est-ce juste un compromis pragmatique pour MVC ou est-ce qu'il me manque quelque chose ici?

Comment gérez-vous ce problème? Ou ne le voyez-vous même pas comme un?

Répondre

2

Il semble qu'il soit possible d'accéder "de force" aux aides des contrôleurs. Voir cette discussion ici:

http://lojic.com/blog/2007/07/27/using-helpers-inside-controllers-in-ruby-on-rails/

Vous pouvez aussi "rendre" une partie à une variable d'instance. Voir cette page:

http://snippets.dzone.com/posts/show/396

Normalement, si vous appelez "render_partial" dans un contrôleur, rien que la partie sera rendu.

Il est parfois utile de rendre un partiel à une variable d'instance sous la forme d'une chaîne de sorte que la vue puisse toujours être rendue comme normal et la chaîne peut être transmise à la vue.

add_variables_to_assigns

@content_for_navbar = @ template.render_partial « layouts/public_navbar'`

2

Rails est pas nécessairement strictement MVC. Dans le monde des Rails, les contrôleurs ressemblent davantage à ce que l'on pourrait appeler des View-Controllers dans le pattern MVC. En outre, je dirais que dans le MVC «pur», les contrôleurs devraient pas faire des requêtes DB et la logique métier qui devrait être encapsulée dans la couche modèle. Les contrôleurs concernent le déplacement de données entre la vue et le modèle.

Que diriez-vous de créer des méthodes d'aide pour l'affichage de ce format que vous vous en tenez dans le hachage flash? Le flash doit non seulement contenir des valeurs de chaîne; il peut contenir des objets arbitraires. Je me trouve souvent mettre un tableau d'erreurs de validation de modèle dans flash[:error], et en écrivant une méthode d'assistance pour formater ces messages dans un <ul>.

0

Si vous voulez vraiment, vous pouvez stocker une clé dans la variable flash et ensuite dans la vue traduire cette clé dans un message réel. L'affichage du flash n'est en aucun cas intégré. Tout dépend de combien de travail vous êtes prêt à y mettre afin d'obtenir MVC pur.

0

La méthode décrite par shedd n'a pas fonctionné pour moi. La deuxième méthode décrite dans http://snippets.dzone.com/posts/show/396 a travaillé:

@content_for_navbar = render_to_string :partial => "layouts/public_navbar" 
Questions connexes