2017-05-31 5 views
2

Ich bin mir bewusst, dass ich eine Anwendungsansicht innerhalb einer Engine überschreiben kann, indem ich einfach dieselbe Datei innerhalb der Engine erstelle und sie aus der Anwendung entferne (zB: 'users/show.html.erb ').Rails-Engine erweitert Ansichten, nicht überschrieben

Allerdings möchte ich in der Lage sein, die Anwendungsansicht zu erweitern, nicht zu überschreiben.

Können sagen, ich habe eine yield innen ‚Benutzer/show.html.erb‘ der Hauptanwendung:

yield :foo

Was ich will, für den Motor ist die gleiche Datei ‚Benutzer/show angeben .html.erb‘und hat einen content_for Block

content_for :foo {}

Dadurch einige Schablonendaten von den Motoren Ansicht Injizieren in die Ansicht Anwendungen.

Offensichtlich wird das oben genannte nicht funktionieren, sobald es die Schablonendatei in der Anwendung gefunden hat, wird es nach einem in der Maschine nicht suchen.

Gibt es eine Möglichkeit, dies zu erreichen?

Antwort

0

Es gibt keine Möglichkeit, Ansichten in Rails zu erweitern. Sie können dies jedoch mit Teiltönen erreichen. In Ihrem Motor, eine Teilansicht Datei users/_show.html.erb schreiben und es dann in Ihrem App Ansicht Render:

# app/views/users/show 

# will look for a partial called "_show.html.erb" in the engine's and app's view paths. 
render partial: 'show' 

Es ist genauso einfach, wie Sie Ihren Vorschlag.

Dieses Juwel versucht partielle Erweiterung der Ansichten zu implementieren, aber es funktioniert in ähnlicher Weise zu dem, was ich gerade beschrieben: https://github.com/amatsuda/motorhead#partially-extending-views-in-the-main-app

+0

Yeh, das ist, was ich für am Ende gehen. Meine Lösung sucht in jeder Engine nach einem bestimmten Teil (Name mit dem Namen der Engine). –

Verwandte Themen