2011-10-25 4 views
2

J'ai ces 4 modèles connectés les uns aux autres par l'intermédiaire de has_many, belongs_to associations. Les bases sont 2 (Recette, Ingrédient). Les 2 autres stockent des informations supplémentaires basées sur les deux précédentes.rails 3 Association ActiveRecord

class Recipe 
    has_many :ingredients, :through => :prescriptions 
    has_many :prescriptions 
end 

class Ingredient 
    has_many :recipes, :through => :prescriptions 
    has_many :prescriptions 
    has_many :stocks 
end 

class Stock 
    belongs_to :ingredient 
end 

class Prescription 
    belongs_to :recipe 
    belongs_to :ingredient 
end 

J'essaie de chercher recettes qui sont stocks disponibles, c'est-Recipe.joins (: ingrédients) .joins (: actions) mais, je reçois une erreur:

ActiveRecord::ConfigurationError: Association named 'stock' was not found; perhaps you misspelled it? 

La requête SQL I essayer d'atteindre est:

SELECT "recipes".* FROM "recipes" 
INNER JOIN "prescriptions" 
ON "prescriptions"."recipe_id" = "recipes"."id" 
INNER JOIN "ingredients" 
ON "ingredients"."id" = "prescriptions"."ingredient_id" 
--- 
INNER JOIN "stocks" 
ON "stocks"."ingredient_id" = "ingredients"."id" 
--- 

le dernier "INNER JOIN" est que je ne peux pas interpréter dans le code 3 rails. Des idées?

Merci,

Répondre

2

Ne pas avoir un modèle pour vérifier, mais du haut de ma tête, vous devez lui dire que vous n'êtes pas se joindre au large du modèle original

Recipe.joins(:ingredients).joins(:ingredients => :stocks).select: 
+0

oui ! c'est correct! Je ne peux pas croire que c'était si simple! Je vous remercie! –

Questions connexes