Rails 3.1如何在保存孩子时使用父属性?

时间:2011-12-07 13:36:43

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

使用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属性的值呢?这是我需要在控制器中做些什么吗?

2 个答案:

答案 0 :(得分:0)

实际上,这取决于您为Course创建User的方式。例如,这适用于CoursesController,它也知道用户是谁:

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

在关联上使用 #build 会分配相应的父ID,因此user会显示course

答案 1 :(得分:0)

在这种情况下,您可以使用after_commit回调。