0

Ruby 2 と Rails 4 を実行しています。

各食事のカロリーと主要栄養素を追跡できるアプリを作成していますが、食事インデックスには、これまでに入力したすべての食事ではなく、各ユーザーが今日入力したもののみが表示されるようにしたいと考えています。

私は現在、毎日入力されたものだけを表示していますが、下部の合計は、今日の合計だけでなく、これまでに入力されたすべての食事です. 変数.created_at.to_date == Date.currentに on を追加できません。@mealsそれはスローしますundefined method 'created_at' for 1500:Fixnum

各ユーザーには、特定の日に残っているカロリーなどを計算する BMR があります。

MealsController のインデックス ビュー:

<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Calories</th>
      <th>Protein</th>
      <th>Carbs</th>
      <th>Fats</th>
    </tr>
  </thead>

  <tbody>
    <% @meals.each do |meal| %>
      <tr class= "value">
        <% if meal.created_at.to_date == Date.current %>
          <td><%= link_to meal.name, edit_meal_path(meal) %></td>
          <td><%= meal.calories %></td>
          <td><%= meal.protein %></td>
          <td><%= meal.carbohydrates %></td>
          <td><%= meal.fats %></td>
        <% end %>
      </tr>
    <% end %>
      <tr>
        <td class="meal-total">Total:</td>
        <td class="meal-total"><%= @meals.sum(:calories) %></td>
        <td class="meal-total"><%= @meals.sum(:protein) %></td>
        <td class="meal-total"><%= @meals.sum(:carbohydrates) %></td>
        <td class="meal-total"><%= @meals.sum(:fats) %></td>
      </tr>
      <% unless current_user.bmr.nil? %>
        <tr class="remaining">
          <td class="meal-remaining">Remaining:</td>
          <td class="meal-remaining"><%= current_user.bmr - @meals.sum(:calories) %></td>
          <td class="meal-remaining"><%= (current_user.bmr*0.4/4).to_i - @meals.sum(:protein) %></td>
          <td class="meal-remaining"><%= (current_user.bmr*0.4/4).to_i - @meals.sum(:carbohydrates) %></td>
          <td class="meal-remaining"><%= (current_user.bmr*0.2/9).to_i - @meals.sum(:fats) %></td>
        </tr>
      <% end %>
  </tbody>
</table>

私の食事コントローラー:

class MealsController < ApplicationController
  before_action :set_meal, only: [:edit, :update, :destroy]
  before_action :authenticate_user!, except: :index

  def index
    @meals = current_user.meals if user_signed_in?
  end
  .
  .
  .
  .
end

前もって感謝します!

4

2 に答える 2

2

それにはいくつかの方法がありますが、最も簡単な方法は、今日の食事のみを提供する ActiveRecord スコープを追加することです。

このSOの質問/回答には、いくつかの方法があります。お気に入りを選んでください。

その後、これを変更するだけです:

def index
  @meals = current_user.meals.today if user_signed_in?
end
于 2013-10-16T14:40:00.903 に答える