在视图中显示连接表行(has_many通过关联)

时间:2016-05-11 23:12:15

标签: ruby-on-rails ruby many-to-many

事情是:我正在做一个基本的饮食计划,它有膳食,成分和数量。 当用户做饭时,他选择成分并设定其数量。 我想要的只是在膳食索引页面中显示成分及其数量。

<% 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 %>

显示与所选成分相关的所有数量。我没有张贴模特,因为我觉得它太明显了。 感谢

修改

分贝/ 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 突出显示的数字是香蕉成分的数量。 然而,对于与之相关的膳食,我只想要&#34; 123&#34;。 我想这是一个查询问题,我不知道如何修复它。

2 个答案:

答案 0 :(得分:0)

这可能是您正在寻找的:

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

这将显示成分名称和成分的第一个数量。它不会显示任何额外的成分,而不是碳水化合物,蛋白质或脂肪量。

答案 1 :(得分: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 %>

我只是不知道这是否是最好的解决方案,但对我有用!