通过关联查询has_many模型

时间:2013-02-22 22:48:25

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

我需要通过相关模型查询我的模型。

伪代码: @drinks = Drink.where(drink.ingredients are in cabinet.ingredients)

饮料模型

class Drink < ActiveRecord::Base
  attr_accessible :name

  has_many :recipe_steps, :dependent => :destroy
  has_many :ingredients, through: :recipe_steps
end

成分模型

class Ingredient < ActiveRecord::Base
  attr_accessible :name

  has_many :recipe_steps
  has_many :drinks, through: :recipe_steps
  has_many :cabinet_ingredients
  belongs_to :cabinet
end

用户模型

class User < ActiveRecord::Base

  has_one :cabinet
end

编辑:正如我所建议的那样

Drink.joins(ingredients: :cabinet_ingredients)

然而,当我从我的柜子和/或多个用户喝一种含有2种成分的饮料时,它会返回同一饮料的多个记录。

我只需要退回一份饮料记录..此外,如果所有食材都在橱柜中配对,我只需要退回饮料

2 个答案:

答案 0 :(得分:1)

我将如何做到这一点。如果所有成分都存在于给定的橱柜配料中,请选择一种饮料。我知道它不像您的伪代码那样使用Drink.where,但它可以完成工作。

Drink.all.select{|drink| drink.ingredients.all?{|drink_ingredient| cabinet.ingredients.include?(drink_ingredient)}}

答案 1 :(得分:0)

试试这个。

Drink.joins(ingrediants: :cabinet_ingredients).uniq