选择不同的表字段

时间:2018-02-08 00:20:29

标签: ruby-on-rails ruby-on-rails-4 activerecord

我使用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

如何显示两个表格中的所有数据?

3 个答案:

答案 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