在视图中显示加入 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 %>
我只是不知道这是否是最佳解决方案,但对我有用!
事情是:我正在做一个基本的饮食计划,其中有膳食、成分和数量。 当用户做饭时,他 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 %>
这会是您要找的吗:
<% 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 %>
我只是不知道这是否是最佳解决方案,但对我有用!