学习 Rails -> 设置食谱应用程序

Learning Rails -> Setup a Cookbook App

我是 Rails 的新手,正在尝试设置一个食谱应用程序进行练习。这是我目前所拥有的:

数据库设置 - 3 tables(为了便于阅读而简化)

recipes (id, name, description)

recipe_ingredients (id, recipe_id, ingredient_id, qty, unit)

ingredients(id, name)

型号

class Recipe < ActiveRecord::Base
  has_many :recipe_ingredients, dependent: :destroy
  has_many :ingredients, through: :recipe_ingredients
end

class RecipeIngredient < ActiveRecord::Base
  belongs_to :recipe
  belongs_to :ingredient
end

class Ingredient < ActiveRecord::Base
  has_many :recipe_ingredients
  has_many :recipes, through: :recipe_ingredients
end

这是我的问题。我想检索一份食谱的成分列表,包括数量和使用的单位,以便我可以在我的视图中遍历它。

这是我尝试过的(显示局部变量,我知道我必须使用实例变量才能在视图中使用):

recipe = Recipe.first

recipe.ingredients -> 从成分 table 中为我提供了该食谱的所有成分,但它不包括 recipe_ingredients table 中的数量和单位。

recipe.recipe_ingredients -> 给了我 recipe_ingredients table 中的所有相关记录,但我只得到 ingredient_id 而不是实际的成分名称。

如何使用最少的查询检索食谱及其所有成分,包括数量和单位?我认为在这种情况下是 2。

谢谢,

狮子座

您可以添加 delegation 来增加 RecipeIngredient 个实例的功能。

我会特别查看 prefix 部分,否则你只能将 name 委托给一个 class.

您正在寻找 includes 方法。你需要这样的东西:

recipe = Recipe.includes(:ingredients, :recipeingredients).first

这将 return 第一个食谱及其所有相关成分和食谱成分。