2016-05-11 2 views
0

Дело в том, что я занимаюсь основным диетологом, который имеет питание, ингредиенты и количество. Когда пользователь готовит еду, он выбирает ингредиенты и задает их количество. Все, что я хочу, это отображать в строках страницы индекса еды ингредиенты и их количества.Отображение строки таблицы соединений в представлении (has_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 %> 

Это показывает все количества, связанные с выбранным ингредиентом. Я не размещаю модели, потому что считаю, что это слишком очевидно. Благодаря

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

Я добавил больше кода и объяснил немного дальше. Если вам нужно что-то еще, просто скажите мне :) спасибо –

+0

Чтобы понять, что вы просите, вы просто хотите, чтобы эта строка отображала «Банана 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

Вы уже должны быть отфильтрованы 'meal' в этот момент. 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 %> 

Это будет отображать название ингредиента и первое количество для ингредиента. Он не отображает никаких дополнительных количеств для ингредиента, а не количества карбюратора, белка или жира.

+0

Вы pluralized ингредиенты намеренно? Я не узнал, где можно использовать этот ответ. Я редактировал свой пост, чтобы вы могли лучше понять мою мысль. Еще раз спасибо –

+0

Я обновил ответ с тем, что, я думаю, вы просите. –

+0

Да, но это не всегда первое, представьте лист Excel, в котором вы делаете себе диету. Разница заключается в том, что я использую отношение многих-многих, потому что я хочу, чтобы пользователь использовал компонент, который уже существует, и я имею дело с количеством в качестве таблицы соединений. –

Смежные вопросы