2010-12-15 359 views
1

Je suis curieux de savoir quel est l'état de l'art pour les vues DRY de nos jours. J'ai une application qui évolue depuis plus de trois ans et demi, et ces jours-ci la couche de vue n'est pas un endroit heureux. En premier lieu, j'ai une application qui est utilisée par plusieurs groupes d'utilisateurs différents, et j'ai besoin d'en ajouter d'autres. Il y a un chevauchement important entre ce que voient les différents utilisateurs, mais il y a encore beaucoup de choses exclusives à chaque groupe. Les utilisateurs ont des restrictions quoi et combien de détails ils voient. C'est votre application Web basée sur les rôles standard.Rails: vues DRY pour les utilisateurs basés sur les rôles

Actuellement, l'application utilise un méli-mélo moche de partiels (avec des variables locales), et des partiels utilisant des partiels, content_for blocks et helpers, et un tas de duplication.

Ce que je cherche, c'est ce que les gens font ces jours-ci pour garder leurs vues SÈCHES?

J'ai commencé à regarder Cells (http://cells.rubyforge.org/), mais je me demandais, quoi d'autre est là pour résoudre ce problème.

Qu'est-ce que vous utilisez pour les vues complexes et basées sur les rôles?

+0

Je ne pense pas qu'une réponse générale existe. – Lichtamberg

Répondre

1

Je suis confronté au même problème/défi. J'ai commencé à implémenter Cell mais je suis tombé sur un mur, 'content_for' n'est pas supporté de la manière attendue et il n'est pas possible d'ajouter du contenu à la maquette principale avec une vue de cellule.

Ceci est une limitation dans Rails/la façon dont Cell utilise des rails et n'est pas vraiment contournable semble-t-il.

Si vous pouvez vivre avec cette limitation, je pense que c'est la meilleure solution pour les blocs de contenu répétés.

légèrement offtopic la meilleure solution au problème ci-dessus pour moi est la suivante:

Si l'ensemble de cellule a besoin d'être rendue dans un contenu différent de bloquer les éléments suivants peuvent être utilisés pour obtenir une belle api:

Mettez le morceau de code suivant dans le application_helper.rb:

def render_cell_for(id, cell, action, options = nil, &block) 
    content_for id do 
    render_cell(cell, action, options, &block) 
    end 
end 

Utilisez

<%=render_cell_for(:content_for, :cell, :action) %> 

dans vos vues à rendre dans un contenu pour le bloc.