在视图中显示加入 table 行(has_many 通过关联)

Displaying join table row in view (has_many through association)

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

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

这显示了与 selected 成分相关的所有数量。我没有发布模型,因为我认为它太明显了。 谢谢

编辑

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

突出显示的数字是香蕉成分的数量。 但是,对于与之相关的餐点,我只想要“123”。 我想这是查询的问题,我不知道如何解决它。

这会是您要找的吗:

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

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

知道了!

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

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