2011-12-07 49 views
2

使用Devise在Rails 3.1項目上工作。Rails 3.1如何在保存孩子時使用父類屬性?

我的用戶模型has_many:課程和課程belongs_to:用戶。

用戶有一個布爾屬性里程,模型需要在保存前檢查。我試圖使用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 

很明顯,我不能使用course.user.miles,因爲新課程一直沒有USER_ID被設定。

那麼如何檢查user.miles屬性的值?這是我需要在控制器中做的事嗎?

回答

0

實際上,這取決於您如何爲User創建Course。例如,這個工作在CoursesController也知道用戶是誰:

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

上的關聯使用#build分配適當的父ID,所以user將從course可見。

+0

真正的問題是使用課程而不是自我。我將course.user.miles改爲self.user.mile並且它可以工作。但你的迴應消除了盲區 - 謝謝! – jacoulter

0

在這種情況下,您可以使用after_commit回調。

相關問題