You are not logged in.

  • Login

1

Monday, October 4th 2010, 4:13pm

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:

HTML Code

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

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/:

HTML Code

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:

Source code

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:

RubyOnRails Quellcode

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

app/view/posts/_post.html.erb

HTML Code

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

Gibt es für layouts andere Regeln bei den Partials? Anders kann ich mir diesen Fehler leider nicht erklären.

This post has been edited 1 times, last edit by "Deadman44" (Oct 7th 2010, 12:17pm)


2

Monday, October 4th 2010, 7:46pm

Das Layout wird ja vom Applications-Controller gerendert. Generell wird ausgehend vom Controller gesucht. Versuche doch einfach mal das Partial in einen apllications-Ordner zu legen. Aufgrund fehlender IDE kann ich das Problem grad nicht nachstellen. Werde das aber die Tage nachholen, falls du es noch nicht gelöst bekommst...

3

Monday, October 4th 2010, 9:01pm

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.

This post has been edited 1 times, last edit by "Deadman44" (Oct 5th 2010, 10:43pm)


4

Tuesday, October 5th 2010, 5:03pm

und direkt im /app ?

ich versuche das heut Abend mal

5

Tuesday, October 5th 2010, 10:43pm

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

RubyOnRails Quellcode

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

aufrufe, dann funktioniert es wunderbar. Nur nicht, wenn ich Rails die Variable übergebe.

This post has been edited 1 times, last edit by "Deadman44" (Oct 5th 2010, 11:02pm)


6

Wednesday, October 13th 2010, 8:40pm

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:

RubyOnRails Quellcode

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


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

Funktioniert es denn mittlerweile bei dir?
mad has attached the following file:

Social bookmarks