has_many through
レシピ アプリ用に、Ingredient
と が をMeal
介して接続する結合テーブルを設定しましたMealIngredient
。 内には、 、、 がMealIngredient
あります。 質問は、列にアクセスするにはどうすればいいかということです。meal_id
ingredient_id
amount
amount
レシピ ビューでは、材料をループします。
@meal.ingredients.each do |i|
結合レコードから成分のプロパティにはアクセスできますが、量にはアクセスできませんMealIngredient
。
includes
クエリで を使って を実行しようとしましたが、前述のループ内で に@meal.ingredients.includes(:meal_ingredients)
アクセスする方法がわかりません。 を使用すると、テーブルへの参照がまったく表示されません。amount
i.inspect
meal_ingredients
を使用してループ内の変数にアクセスする方法はありますかi.amount
?
ご協力いただければ幸いです。
ベストアンサー1
この場合、関連付けをループする必要があります。DBクエリを減らすには、関連付けmeal_ingredients
を Eager Load する必要があります。ingredients
@meal.meal_ingredients.includes(:ingredient).each do |meal_ingredient|
puts meal_ingredient.amount
puts meal_ingredient.ingredient.name
end
アップデート
この更新は Rich Peck の回答の後に行われましたが、彼が行ったことを実現するにはもっと簡単な方法があると思います。
@meal.ingredients.select('ingredients.*, meal_ingredients.amount').each do |ingredient|
puts ingredient.amount
puts ingredient.name
end