2016-05-11 4 views
0

事は次のとおりです。私は基本的な食事プランナーをしています。食事、成分、量があります。 ユーザーが食事をするとき、彼は成分を選択し、その量を設定します。 私が望むのは、食事指標のページの行に成分とその量を表示することです。ビューに結合表の行を表示する(has_many from 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 %> 

これは、選択した成分に関連するすべての量を示しています。私はそれがあまりにも明白だと思うので、私はモデルを投稿していません。 おかげ

EDIT

デシベル/ザ・数字は、バナナからの量で強調表示さ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 

ビュー/食事/ 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 成分。 しかし、食事のためには私は "123"だけを欲しいです。 私はそれがクエリの問題だと思うし、私はそれを修正する方法を見つけることはありません。

+0

行データと出力の例を投稿できますか?あなたがしようとしていることを正確に伝えるのは難しいです。 –

+0

コードを追加してもう少し説明しました。他に何かが必要な場合は、私に教えてください:) thanks –

+0

あなたが求めていることを理解するために、その行に 'Banana 123'と他の値を表示したいだけですか? –

答えて

0

GOT IT!

<p id="notice"><%= notice %></p> 
<h1>Listing Meals</h1> 
<% @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> 
<!-- FILTERED INGREDIENT QUANTITY ACCORDING TO MEAL ID --> 
       <td><%= ingredient.quantities.find_by(meal_id: meal.id).quant %></td> 
       <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 %> 

私はそれが最高の解決策であるかどうかわかりませんが、私のために働いています!

+0

あなたは既にその時点で '食事 'によってフィルタリングされているはずです。上記の3行は 'meal.ingredients.each'を示しています。これは、クエリだけを食事に関連させます。あなたの関係やデータに本当に間違ったことがないかぎり、別の 'find_by(meal_id)'を実行する必要はありません。 –

+1

ビューにデータベースクエリを埋め込むのも非常に難しいことに注意してください。コントローラーでの照会、およびビュー内の表示ロジックのみが必要です。 –

0

これはあなたが探しているものが考えられます。

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

これは、成分の名称や成分のための第1の量を表示します。炭水化物、タンパク質、または脂肪の量ではなく、成分の追加量は表示されません。

+0

あなたは意図的に成分を複数化しましたか? 私はこの回答をどこで使うことができるか分かりませんでした。私は私のポストを編集したので、あなたは私のポイントをよりよく理解することができます。もう一度ありがとう –

+0

私はあなたが求めていると答えたものを更新しました。 –

+0

はい、それはいつも最初のことではありませんが、自分で食事をするExcelシートを想像してみてください。違いは、ユーザーがすでに存在する成分を使用したいので、多対多の関係を使用していることです。結合表として数量を処理しています。 –

関連する問題