我使用rails 4和mysql。我有两个食谱和类别模型。
class Category < ApplicationRecord
has_many :recipes
validates_uniqueness_of :name, message: "deve ser único"
validates_presence_of :name, message: "can't be blank"
end
class Recipe < ApplicationRecord
belongs_to :category
end
配方字段是:id,title,resume和category_id,它是类别的参考。
类别字段是:id和name
我正在尝试通过Recipe表进行查询,结果我得到了两个表的所有字段。我试图通过以下查询来执行此操作:
Recipe.joins(“INNER JOIN类别ON categories.id = recipes.category_id “)。包含(” 类别“)
但结果只给我Recipe表中的结果。结果是:
食谱id:1,标题:“ababa”,简历:nil,created_at:“2018-02-07 23:16:19“,updated_at:”2018-02-07 23:16:19“,category_id:9
如何显示两个表格中的所有数据?
答案 0 :(得分:2)
您可以使用
recipes = Recipe.includes(:category) # Get all recipes and their categories
recipe = Recipe.includes(:category).find_by(id: 1) # Get one recipe with id = 1
包含不是强制性的,但需要加载。
然后你可以处理一个或多个食谱。对于特定的食谱,您可以获得该类别。
catname = recipe.category.name # Name of the category of one recipe
catnames = [] # Empty array
recipes.each do |r|
catnames << r.category.name # Add name of category to array of names
end
注意:Subash的答案几乎没问题,但第一个语句返回一个食谱数组(返回许多对象),而不是唯一的食谱。这就是你无法获得该类别的原因。
答案 1 :(得分:1)
您可以使用includes
预加载关联数据,这样就可以
recipe = Recipe.includes(:category).where....
category = recipe.category
答案 2 :(得分:1)
从Subash中纠正一下
recipes = Recipe.includes(:category).where ...
recipes.each do |recipe|
# category you need is here
category = recipe.category
end