2016-05-11 27 views
0

Die Sache ist: Ich mache eine grundlegende Diät-Planer, der Mahlzeiten, Zutaten und Mengen hat. Wenn ein Benutzer eine Mahlzeit macht, wählt er die Zutaten aus und stellt die Menge davon ein. Alles, was ich will, ist, in der Mahlzeit Index Seite Zeilen mit den Zutaten und ihre Mengen anzuzeigen.Anzeige der Join-Tabellenzeile in der Ansicht (has_many through association)

<% meal.ingredients.each do |ingredient| %> 
     <tr> 
      <td><%= ingredient.name %></td> 
      <% ingredient.quantities.each do |q| %> 
      <td><%= q.quant %></td> 
      <% end %> 
      <td><%= ingredient.unit %></td> 
      <td><%= ingredient.carb %></td> 
      <td><%= ingredient.prot %></td> 
      <td><%= ingredient.fat %></td> 
     </tr> 
     <% end %> 

Dies zeigt alle Mengen an, die mit der ausgewählten Zutat verknüpft sind. Ich poste keine Modelle, weil ich denke, dass es zu offensichtlich ist. Dank

EDIT

db/schema.rb

create_table "ingredients", force: :cascade do |t| 
    t.string "name" 
    t.string "unit" 
    t.float "carb" 
    t.float "prot" 
    t.float "fat" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

    create_table "meals", force: :cascade do |t| 
    t.string "name" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

    create_table "quantities", force: :cascade do |t| 
    t.float "quant" 
    t.integer "ingredient_id" 
    t.integer "meal_id" 
    end 

views/Mahlzeiten/index.html.erb

<% @meals.each do |meal| %> 
    <div class="x_panel"> 
    <div class="x_title"> 
     <h2><%= meal.name %></h2> 
     <ul class="nav navbar-right panel_toolbox"> 
     <li><a class="collapse-link"><i class="fa fa-chevron-up"></i></a> 
     </li> 
     <li class="dropdown"> 
      <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><i class="fa fa-wrench"></i></a> 
      <ul class="dropdown-menu" role="menu"> 
      <li><%= link_to 'Show', meal %> 
      </li> 
      <li><%= link_to 'Edit', edit_meal_path(meal) %> 
      </li> 
      </ul> 
     </li> 
     <li><%= link_to '', meal, method: :delete, data: { confirm: 'Are you sure?' }, class: "fa fa-close" %> 
     </li> 
     </ul> 
     <div class="clearfix"></div> 
    </div> 
    <div class="x_content"> 

     <table class="table table-striped"> 

     <tbody> 
      <% meal.ingredients.each do |ingredient| %> 
      <tr> 
       <td><%= ingredient.name %></td> 
       <% ingredient.quantities.each do |q| %> 
       <td><%= q.quant %></td> 
       <% end %> 
       <td><%= ingredient.unit %></td> 
       <td><%= ingredient.carb %></td> 
       <td><%= ingredient.prot %></td> 
       <td><%= ingredient.fat %></td> 
      </tr> 
      <% end %> 
     </tbody> 
     </table> 

    </div> 
    </div> 
<% end %> 

<%= link_to 'New Meal', new_meal_path %> 

enter image description here Die Zahlen hervorgehoben Mengen von Bananen sind Zutat. Aber für das Essen ist es verbunden, ich will nur "123". Ich denke, es ist ein Problem von Abfragen und ich finde nicht heraus, wie es zu beheben ist.

+0

Können Sie Beispiele für Zeilendaten und Ausgaben posten? Es ist schwierig zu sagen, was genau Sie vorhaben. –

+0

Ich habe mehr Code hinzugefügt und ein wenig weiter erklärt. Wenn du etwas anderes brauchst, sag es einfach :) Danke –

+0

Damit ich verstehe, was du verlangst, willst du nur, dass die Zeile 'Banana 123' zeigt und keine anderen Werte? –

Antwort

0

GOT IT!

Ich weiß einfach nicht, ob es die beste Lösung ist, aber für mich gearbeitet!

+0

Sie sollten an diesem Punkt bereits nach "Essen" gefiltert werden. 3 Zeilen darüber zeigen "meal.ingredients.each", was die Abfrage nur auf die Mahlzeit bezieht. Sie sollten darin nicht eine separate "find_by (meal_id)" machen müssen, es sei denn, mit Ihren Beziehungen und/oder Ihren Daten stimmt etwas nicht. –

+1

Beachten Sie, dass es auch sehr schlecht ist, eine Datenbankabfrage in Ihrer Ansicht einzubetten. Sie möchten Ihre Abfragen in der Steuerung und nur die Anzeigelogik in Ihrer Sicht. –

0

Könnte das sein, was Sie suchen:

<% meal.ingredients.each do |ingredient| %> 
    <tr> 
    <td><%= ingredient.name %></td> 
    <td><%= ingredient.quantities.first.quant %></td> 
    </tr> 
<% end %> 

Dies wird die Zutat Namen und die erste Menge für den Bestandteil anzuzeigen. Es werden keine zusätzlichen Mengen für den Inhaltsstoff angezeigt, nicht die Kohlenhydrat-, Protein- oder Fettmengen.

+0

Sie pluralisierte Zutaten absichtlich? Ich habe nicht herausgefunden, wo diese Answear verwendet werden kann. Ich habe meinen Beitrag bearbeitet, damit Sie meinen Standpunkt besser verstehen können. Nochmals vielen Dank –

+0

Ich habe die Antwort mit dem, was ich denke, Sie gefragt haben, aktualisiert. –

+0

Ja, aber es ist nicht immer die erste, stell dir eine Excel-Tabelle vor, wo du dich selbst ernährst. Der Unterschied ist, dass ich eine Beziehung von vielen zu vielen verwende, weil ich möchte, dass der Benutzer eine Zutat verwendet, die bereits existiert, und ich habe mit der Menge als Join-Tabelle zu tun. –

Verwandte Themen