2011-01-07 8 views
0

Ich habe eine Modellkategorie und ein Modell Weblink. Kategorie has_many Weblink und Weblink gehört zur Kategorie. Jetzt möchte ich alle Kategorien in einer Ansicht zeigen, und innerhalb einer Kategorie alle Web-Links zu dieser Kategorie gehören, etwas Link zu dieser:Verschachtelte Ausgabe mit verwandten Modellen

<ul> 

<% @ categories.each tun | Kategorie | %>

  • <% = Kategorie.Kategorie_Name%>
  • <% @ weblinks.each do | weblink | %>
  • <% = weblink.category_name link_to weblink.link_name, weblink.link_url%>
  • <% end%> <% end%>

    Im Controller habe ich:

    @categories = Category.all 
    

    @weblinks = Weblink.all Dies zeigt jede Kategorie und in jeder Kategorie alle Weblinks, nicht nur die, die zu der bestimmten Kategorie gehören. Wie kann ich das beheben?

    Antwort

    0

    Ihr sollte Ansicht Code wie dieser es

    <% @categories.each do |category| %> 
        <%= category.name > 
        <% category.weblinks.each do |weblink| %> 
         <%= link_to weblink.name, weblink.link_url %> 
        <% end -%> 
    <% end -%> 
    

    aussehen Ihren Controller, wenn für alle Abfragen der Kategorien sollten Sie auch das Weblinks-Modell, etwa so:

    @categories = Category.all(:include => :weblinks) 
    
    +0

    Danke das hat funktioniert :-) – John

    0

    Scope die innere Schleife zu der Außen Kategorie das Makro Sie mit has_many mit bekommen:

    <% @categories.each do |category| %> 
        <%= category.category_name %> 
        <% category.weblinks.each do |weblink| %> 
        <%= link_to weblink.link_name, weblink.link_url %> 
        <% end %> 
    <% end %> 
    
    +0

    Aber dann muss ich eine Beziehung in der hinzufügen Controller? Ich kann nicht einfach sagen: @categories = Category.all und @weblinks = Weblink.all? – John

    +0

    Wenn Sie in Ihrer Kategorie "has_many: weblinks" und in Ihrem Weblink "belongs_to: category" angegeben haben, ruft eine Kategorie für # Weblinks entweder alle Weblinks mit der korrekten category_id aus der Datenbank ab oder gibt die URL zurück Weblinks, die zuvor abgerufen wurden (z. B. wenn Sie ": include =>: weblinks" verwendet haben, wenn Sie Category.all im Controller ausführen, wie Victor es vorschlägt). – Mortice

    Verwandte Themen