前提・実現したいこと
モデルの関係をもった状態で日次で食べた食品情報をDBに格納できるようにしたい
現状
日次で食べた食品情報を格納するFooddiaryモデルとユーザーの1日あたりに食べてよい食品情報を格納するIdealweightモデルを紐付けするとDBに食べた食品情報が格納されなくなってしまいます。
なおモデルの紐付けを外すと正常に格納されます。
紐付けがうまくいっていないのか。
なぜ格納されないのか調べても今ひとつわからなかったため質問させていただきました。
またfooddairyモデル(日次食品情報)とidealweightモデル(そのユーザーの1日あたりにとっていい食品情報)は多:1で考えています。
※該当コードは下記にまとめて記述しております。
###binding.pryすると
From: /home/ec2-user/environment/bodymake/app/controllers/fooddiaries_controller.rb:21 FooddiariesController#create: 19: def create 20: @fooddiary = current_user.fooddiaries.create(fooddiary_params) => 21: binding.pry 22: redirect_to action: 'index' 23: end [1] pry(#<FooddiariesController>)> @fooddiary.errors.messages => {:idealweight=>["must exist"], :idealweight_id=>["can't be blank"]}
補足
rails
1##fooddiaries_controller.rb 2 3class FooddiariesController < ApplicationController 4 5 def new 6 @fooddiary = current_user.fooddiaries.new 7 end 8 9 def create 10 @fooddiary = current_user.fooddiaries.create(fooddiary_params) 11 redirect_to action: 'index' 12 end 13 14 private 15 def fooddiary_params 16 params.require(:fooddiary).permit(:gram, :kcal, :protein, :fat, :carbo, :timing, :foodname, :fooddate_id, :user_id, :idealweight_id) 17 end 18 19end 20
rails
1##fooddiaries/new.html.erb 2 3<%= form_for @fooddiary do |f| %> 4 <tbody> 5 <tr> 6 <th>foodname</th> 7 <th>gram</th> 8 <th>timing</th> 9 </tr><br> 10 <%= f.collection_select :fooddate_id, Fooddate.all, :id, :foodname %> 11 <td><%= f.number_field :gram, placeholder: "gram" %></td> 12 <td><%= f.select :timing, ['朝食', '昼食', '夕食', '間食'] %></td> 13 <br><%= f.submit "送信", class: "btn" %> 14 </tbody> 15<% end %> 16
rails
1class Idealweight < ApplicationRecord 2##idealweight.rb 3 4 belongs_to :user 5 has_many :fooddiaries 6 7 before_save do 8 self.basemetabolism = 13.397*(weight)+4.799*(height)-5.677*25+88.362 9 self.kcalburned = (basemetabolism)*(exerciselevel) 10 self.minusweight = (weight)-(targetweight) 11 self.minuskcal = (minusweight)*7000 12 self.kcalintake = (kcalburned)-(minuskcal)/(period) 13 self.intakeproteingram = (weight)*2 14 self.intakeproteinkcal = (weight)*2*4 15 self.intakefatgram = (weight)*0.7 16 self.intakefatkcal = (weight)*0.7*9 17 self.intakecarbokcal = (kcalintake)-(intakeproteinkcal)-(intakefatkcal) 18 self.intakecarbogram = (intakecarbokcal)/4 19 end 20end 21
rails
1##fooddiary.rb 2class Fooddiary < ApplicationRecord 3 4 belongs_to :fooddate 5 6 belongs_to :user 7 validates :user_id, presence: true 8 9 belongs_to :idealweight 10 validates :idealweight_id, presence: true 11 12 def self.search(search) 13 if search 14 where(['created_at LIKE ?', "%#{search}%"]) 15 end 16 end 17 18 before_save do 19 self.kcal = (gram)*(fooddate.kcal) 20 self.protein = (gram)*(fooddate.protein) 21 self.fat = (gram)*(fooddate.fat) 22 self.carbo = (gram)*(fooddate.carbo) 23 end 24 25end 26
回答1件
あなたの回答
tips
プレビュー