Rails findet partial nicht

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Rails findet partial nicht

    Hi,

    ich hänge seit heute morgen an einem Fehler, der mich langsam in der Wahnsinn treibt. Und zwar habe ich ein Layout in app/view/layouts/application.html.erb:

    Quellcode

    1. [...]
    2. <!-- Main menu (tabs) -->
    3. <div id="tabs" class="noprint">
    4. <h3 class="noscreen">Navigation</h3>
    5. <ul class="box">
    6. <%= render :partial => @navigations %>
    7. </ul>
    8. <hr class="noscreen" />
    9. </div> <!-- /tabs -->
    10. [...]
    Alles anzeigen

    Dort rufe ich einen Partial für die globale Variable @navigations auf. Ab Rails 2.x wird ja dann automatisch nach eine dem Variablennamen im Singular mit Unterstrich gesucht, also in diesem Fall _navigation.html.erb.
    Diese existiert bei mir ebenfalls im Verzeichnis app/views/layouts/:

    Quellcode

    1. <li><a href="#"><span class="tab-l"></span><span class="tab-r"><%= navigation.title %></span></a></li>

    Wenn ich jetzt jedoch die Seite aufrufen möchte, zeigt er mir folgende Fehlermeldung an:

    Quellcode

    1. Missing partial navigations/navigation with {:handlers=>[:erb, :rjs, :rhtml, :rxml, :builder], [...]

    Was mich jedoch wundert ist, dass ich genau diese Art von Partial in einem View(index.html.erb) einsetzen kann und er alles ohne zu murren ausführt.
    Hier mal zum Vergleich die funktionierenden Dateien:
    app/view/posts/index.html.erb:

    Quellcode

    1. <%= render :partial => @posts %>

    app/view/posts/_post.html.erb

    Quellcode

    1. <!-- Article -->
    2. <div class="article">
    3. <h2><span><a href="#"><%= post.title %></a></span></h2>
    4. <p class="info noprint">
    5. <span class="date"><%= post.created_at %></span><span class="noscreen">,</span>
    6. <span class="cat"><a href="#">Category</a></span><span class="noscreen">,</span>
    7. <span class="user"><a href="#">My name</a></span><span class="noscreen">,</span>
    8. <span class="comments"><a href="#">Comments</a></span>
    9. </p>
    10. <p><%= post.content %></p>
    11. <p class="btn-more box noprint"><strong><a href="#">Continue</a></strong></p>
    12. </div> <!-- /article -->
    Alles anzeigen

    Gibt es für layouts andere Regeln bei den Partials? Anders kann ich mir diesen Fehler leider nicht erklären.
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Deadman44 ()

  • mad schrieb:

    Versuche doch einfach mal das Partial in einen apllications-Ordner zu legen.

    Das habe ich auch schon ausprobiert. Leider ohne Erfolg.
    Mal eine kurze Auflistung der Verzeichnisse, die ich schon probiert habe:
    • app
    • app/controllers
    • app/views
    • app/views/shared
    • app/views/layouts
    • app/views/posts

    Das sind die Verzeichnisse, dir mir mehr oder (meist) weniger sinnvoll erschienen.
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Deadman44 ()

  • Im App Verzeichnis hatte ich die Datei auch schon, ist nur irgendwie in der Aufzählung untergegangen. Ich habe meinen Beitrag jetzt bearbeitet.
    Was mir auch noch aufgefallen ist:
    Wenn ich jedoch einen normalen Partial in das app/view/posts/ ablege und im layout.html.erb diesen mit

    Quellcode

    1. <%= render :partial => "foo" %>

    aufrufe, dann funktioniert es wunderbar. Nur nicht, wenn ich Rails die Variable übergebe.
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Deadman44 ()

  • Also ich habe jetzt mal folgendes getan:

    - PagesController (als root-Route), der die Variable "@navigations" auf "navigation" setzt
    - application.html.erb in /app/views/layout (rendert das Partial und bindet "yield" ein)
    - _navigation.html.erb in /app/views/shared/
    - /app/public/index.html umbenannt

    Bei mir wird alles ordnungsgemäß gerendert. Ich nehme an, du willst erreichen, dass du verschiedene Teile der Navigation aus verschiedenen SItuationen aufrufen kannst. Ganz nach DRY. Dann musst du die Partials in shared legen. Dementsprechend musst du das Partial dann so einbinden:

    Quellcode

    1. <div>
    2. <%= render :partial => "shared/#{@navigations}" %>
    3. </div>


    Anbei mal das ganze Projekt (Netbeans, Rails 2.3.8, Ruby1.8.6, Webrick, Windows)

    Funktioniert es denn mittlerweile bei dir?
    Dateien
    • partialproblem.zip

      (97,14 kB, 419 mal heruntergeladen, zuletzt: )