学习 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 第一个食谱及其所有相关成分和食谱成分。
我是 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 第一个食谱及其所有相关成分和食谱成分。