2010-12-15 15 views
1

Ich bin gespannt, was der Stand der Technik für DRY Ansichten in diesen Tagen ist. Ich habe eine App, die sich seit über dreieinhalb Jahren weiterentwickelt, und in diesen Tagen ist der View-Layer kein fröhlicher Ort.Rails: DRY Views für rollenbasierte Benutzer

Zuerst ein kleiner Hintergrund, ich habe eine App, die von mehreren verschiedenen Benutzergruppen verwendet wird, und ich muss mehr hinzufügen. Es gibt eine beträchtliche Menge an Überschneidungen zwischen dem, was verschiedene Benutzer sehen, aber es gibt immer noch eine Menge, die für jede Gruppe exklusiv ist. Benutzer haben Einschränkungen, was und wie viel Details sie sehen. Es ist Ihre standardbasierte rollenbasierte Web-App.

Derzeit verwendet die App einen hässlichen Mischmasch von Partials (mit lokalen Variablen) und Partials mit Partials, content_for Blöcke und Helfer, und eine ganze Reihe von Duplizierung.

Was ich suche ist, was machen die Leute in diesen Tagen, um ihre Ansichten trocken zu halten?

Ich begann Zellen (http://cells.rubyforge.org/) zu betrachten, aber ich fragte mich, was sonst noch da ist, um dieses Problem zu lösen.

Was verwenden Sie für komplexe und rollenbasierte Ansichten?

+0

Ich glaube nicht, dass eine allgemeine Antwort existiert. – Lichtamberg

Antwort

1

Ich stehe vor dem gleichen Problem/Herausforderung. Ich habe mit der Implementierung von Cell begonnen, bin aber gegen eine Wand gelaufen, "content_for" wird nicht wie erwartet unterstützt, und es ist nicht möglich, Inhalt zum Master-Layout hinzuzufügen, indem eine Zellenansicht verwendet wird.

Dies ist eine Einschränkung in Rails/die Art, wie Cell Rails verwendet und nicht wirklich umgehen kann.

Wenn Sie mit dieser Einschränkung leben können, denke ich, es ist die beste Lösung für wiederholte Inhaltsblöcke.

leicht offtopic die beste Lösung für das obige Problem für mich ist die folgende:

Wenn die gesamte Zelle muss in einem anderen Inhalt blockieren die folgenden gerendert werden können verwendet werden, um eine schöne api zu bekommen:

gebe folgende Stück Code in der 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 

Verwenden

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

in Ihren Ansichten in einem Inhalt für Block zu rendern.