使用Devise处理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
显然我不能使用course.user.miles,因为新课程还没有设置user_id。
那么如何检查user.miles属性的值呢?这是我需要在控制器中做些什么吗?
答案 0 :(得分:0)
实际上,这取决于您为Course
创建User
的方式。例如,这适用于CoursesController,它也知道用户是谁:
course = user.courses.build(params[:course])
if course.save
# ...
end
在关联上使用 #build
会分配相应的父ID,因此user
会显示course
。
答案 1 :(得分:0)
在这种情况下,您可以使用after_commit
回调。