我有一个模型,它使用单表继承和不同类型(学年或学期类型),每种类型都有自己的验证。如果用户试图改变记录的类型,他可以从下拉列表中选择哪个学年类型并进行更改。但是,如果用户更改类型,我无法弄清楚如何使新的类验证运行而不是旧的验证。例如,我的代码如下:如何更改记录的类型并使用类型列在rails中运行正确类的验证?
@school_year = SchoolYear.find(params[:id])
respond_to do |format|
if SchoolYear::SUBCLASSES.include? params[:school_year]['type']
@school_year[:type] = params[:school_year]['type']
else
raise "Invalid type"
end
if @school_year.update_attributes(params[:school_year])
# done
else
# validation problem?
end
现在如果当年的类型是学期,并且用户将其更改为季度,我预计QuarterSchoolYear的验证并没有那些学期的运行。我如何修改代码以使其工作?
它在第4行的代码中失败,因为它实际上并未将其保存在事务中,因此查找失败。 – umar 2011-02-28 10:29:43
你的意思是“它实际上并没有将它保存在交易中”是什么意思? `保存!`会引发异常吗? – zetetic 2011-02-28 19:06:56