Rails 4 結合テーブル属性へのアクセス 質問する

Rails 4 結合テーブル属性へのアクセス 質問する

has_many throughレシピ アプリ用に、Ingredientと が をMeal介して接続する結合テーブルを設定しましたMealIngredient。 内には、 、、 がMealIngredientあります。 質問は、列にアクセスするにはどうすればいいかということです。meal_idingredient_idamountamount

レシピ ビューでは、材料をループします。

@meal.ingredients.each do |i|

結合レコードから成分のプロパティにはアクセスできますが、量にはアクセスできませんMealIngredient

includesクエリで を使って を実行しようとしましたが、前述のループ内で に@meal.ingredients.includes(:meal_ingredients)アクセスする方法がわかりません。 を使用すると、テーブルへの参照がまったく表示されません。amounti.inspectmeal_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

おすすめ記事