2011-12-07 15 views
2

Deviseを使用してRails 3.1プロジェクトに取り組んでいます。Rails 3.1子を保存するときの親属性の使用方法

マイユーザモデルhas_many:コースとコースbelongs_to:user。

ユーザーは、コースモデルが保存する前にチェックする必要があるブール属性のマイルがあります。私はこのようなコースモデルにbefore_saveコールバックを使用しようとしている:

明らか
# check if user preference is miles, if so convert entered value to kilometers. All 
# distances are stored as kilometers and converted to miles if necessary 

before_save :convert_distance 

def convert_distance 
    if course.user.miles 
     course.distance = course.distance * 1.6 
    end 
end 

新しいコースがまだ設定のuser_idを持っていないので、私はcourse.user.milesを使用することはできません。

どのようにしてuser.miles属性の値を確認できますか?コントローラーでこれを行う必要がありますか?

答えて

0

実際には、Userの場合はCourseをどのように作成するかによって異なります。

course = user.courses.build(params[:course]) 
if course.save 
    # ... 
end 

関連適切な親IDを割り当て、そうusercourseから見えるようになるに#buildを使用する:例えば、これは、ユーザが誰であるかを知っているCoursesControllerに働きます。

+0

実際の問題は、自己の代わりにコースを使用していたことです。私はcourse.user.milesをself.user.mileに変更しました。しかし、あなたの応答は盲人を取り除いた - ありがとう! – jacoulter

0

この場合、after_commitコールバックを使用できます。

関連する問題