2014-09-11 1 views
0

Je suis nouveau sur Rails et Ruby en général et suppose qu'il s'agit d'un problème d'installation assez simple. J'ai deux modèles, food et measurement, ils sont comme ci-dessous:ActiveRecord effectuant une jointure vers l'arrière

alimentaire:name, serving_size, measurement_id, [...]

mesure: name

food.rb

has_one :measurement 

measurement.rb

has_many :foods 

(J'ai aussi essayé: nourriture:belongs_to :measurement et mesure:belongs_to_many et un tas d'autres scénarios)

Je suis en train d'afficher la propriété nom de mesure basé sur le food.measurement_id, en SQL ce serait:

SELECT * 
FROM Food 
JOIN Measurement on Food.measurement_id = Measurement.id 

J'ai essayé de mettre simplement dans mon balisage: <%= @food.measurement.name %>, mais le SQL généré semble en arrière pour moi:

pas cette colonne: measurements.food_id:. SELECT « mesures » * à partir de mesures « mesures » où » "." food_id "=? LIMIT 1

J'ai également essayé un certain nombre de jointures différentes dans mon contrôleur, qui ont toutes donné des erreurs ou des erreurs similaires, ce qui m'a indiqué que je n'étais pas proche.

Répondre

2

Si foods a une colonne measurement_id, puis l'alimentation belongs_to mesure et une mesure a de nombreux aliments:

class Food < ActiveRecord::Base 
    belongs_to :measurement 
end 

class Measurement < ActiveRecord::Base 
    has_many :foods 
end 

Maintenant, lorsque vous imprimez le nom de mesure de la nourriture

<%= @food.measurement.name %> 

Le SQL généré ressemblera à quelque chose comme

SELECT `measurements`.* FROM `measurements` WHERE `measurements`.`id` = 1 LIMIT 1 
Questions connexes