2011-12-07 46 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回调。

相关问题