0

ユーザーとエクササイズの関係は、ユーザーがhas_manyエクササイズをし、エクササイズがbelongs_touserであるということです。

class Exercise < ActiveRecord::Base
 belongs_to :user
 attr_accessible :act_id, :bcalor, :comment, :day, :week, :duration

 before_save :calor_burned

 private

 def calor_burned
  act = Activity.find(act_id)
  #how to find user_id?
  #User has_many weeklyweight
  #and weeklyweight belongs to a user 
  wt = (Weeklyweight.where(:week => week, :user_id => user_id).first).weight
  if(wt < 180)
    self.bcalor = ((wt * act.w160 * duration)/60)
   elsif ((wt >= 180) && (wt < 220))
    self.bcalor = ((wt * act.w200 * duration)/60)
   else
    self.bcalor = ((wt * act.w240 * duration)/60)
   end
  end 
 end

ウェイトにアクセスするのに役立つuser.idにアクセスするにはどうすればよいですか?

編集

私はしようとしています

user = act.user

次のエラーが発生します: " undefined method` user'for# "

編集

これが私のユーザーモデルです

class User < ActiveRecord::Base

  attr_accessible :name, :provider, :uid

 # This is a class method, callable from SessionsController
 # hence the "User."
 def User.create_with_omniauth(auth) 
   user = User.new()
   user.provider = auth["provider"]
   user.uid = auth["uid"]
   user.name = auth["info"]["name"]
   user.save
   return user
  end

  has_one :userprofile
  has_many :exercises
  has_many :weeklyweights
end

助けてくれてありがとう

4

1 に答える 1

2

Rails は、エクササイズのインスタンスからユーザーにナビゲートするためのアクセサーを自動的に提供します。メソッドでは、calor_burneduser.id または user_id を実行できるはずです。

これらのメソッドが利用できない場合は、クラス User が言及has_many :exercisesしていることを確認し、2 つのテーブルを正しく設定する移行がありますか? データベースに「user_id」という列があり、それが users テーブルへの外部キーであることを確認します。

于 2012-12-02T22:03:43.077 に答える