带有has_many的模型中的属性总和:通过关联在Rails 5中不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有has_many的模型中的属性总和:通过关联在Rails 5中不起作用相关的知识,希望对你有一定的参考价值。

所以我有2个型号。膳食和食物。一顿饭可以有多种食物,食物可以是许多膳食的一部分。基本上是一个多对多的关联。我用has_many做了那个:通过,加入的模型叫做MealsFood。创建新餐时,您可以通过复选框选择要添加的食品。食物表有一个名为“卡路里”的栏目,膳食表有一个名为“total_calories”的栏目,它在那里计算膳食中所有食物的总和。问题是它无法正常工作。

这是我到目前为止所拥有的......

楷模

class Meal < ApplicationRecord
    belongs_to :user, optional: true
    has_many :meal_foods
    has_many :foods, through: :meal_foods

    def calc_total_calories
        self.foods.sum(:calories)
    end
end

class MealFood < ApplicationRecord
  belongs_to :meal
  belongs_to :food
end

class Food < ApplicationRecord
    has_many :meal_foods
    has_many :meals, through: :meal_foods
end

膳食控制器

class MealsController < ApplicationController
    def index
    end

    def new
        @meal = Meal.new
    end

    def create
        @meal = Meal.new(meal_params)
        @meal.calc_total_calories

        if @meal.save
            redirect_to @meal
        else
            redirect_to root_path
        end
    end

    private

    def meal_params
        params.require(:meal).permit(:user_id, :meal_type, :date, 
  :total_calories, :total_carbohydrates, :total_fat, food_ids:[])
    end
end

查看(用餐的新动作)

            <%= form_for(@meal) do |f| %>
                <div class="field">
                    <%= f.label :meal_type %>
                    <%= f.select :meal_type, ["Breakfast", "Lunch", "Dinner", "Morning Snack", "Afternoon Snack, Evening Snack"] %>
                </div>

                <div class="field">
                    <% Food.all.each do |food| %>
                        <%= check_box_tag "meal[food_ids][]", food.id %>
                        <%= food.name %>
                    <% end %>
                </div>

                <div class="field">
                    <%= f.submit class: "button button-highlight button-block" %>
                </div>
            <% end %>

请注意膳食模型中的def calc_total_calories。这是我用来计算卡路里的东西,但它不起作用。我在Meals控制器的create方法中使用它。请帮忙!提前致谢 :)

以上是关于带有has_many的模型中的属性总和:通过关联在Rails 5中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

验证 has_many 关系中的属性总和

带有has_many的Rails嵌套表单:通过,如何编辑连接模型的属性?

Has_Many 通过关联和嵌套属性

通过Rails中的关联使用has_many创建新模型时出现不允许的参数错误

如何实现 has_many :through 关联两种方式?

使用 has_many 时如何创建关联模型的实例:通过关联