1
我有一个评价与此类似:填充外键上创建行动
Evaluation.rb
has_one :cardio
has_one :neuro
Cardio.rb
belongs_to :evaluation
Neuro.rb
belongs_to :evaluation
我的评价控制器与此类似:
def create
@patient = Patient.find(params[:id])
@evaluator = Evaluator.find(session[:evaluator_id]) if session[:evaluator_id]
@evaluation = Evaliation.new(:patient_id => @patient.id, :evaluator_id => @evaluator.id)
@neuro = Neuro.new(:evaluation_id => @evaluation.id)
@cardio = Cardio.new(:evaluation_id => @evaluation.id)
if (@evaluation.save! && @neuro.save! && @cardio.save!)
redirect_to evaluation_path(@evaluation.id), :notice => "Evaluation created"
else
render ("new")
end
end
当评估创建心肺功能和神经创建过,但使用空evaluation_id。 我试图移动if
内的@cardio = Cardio.new(:evaluation_id => @evaluation.id)
,但它没有奏效。
感谢人,它的工作。但让我们说,我有7或8个更多的评估类型(心,神经,现场测试等)有一个更“美丽”的方式来做到这一点,否则我将不得不手动设置像我在'@ cardio' '@ neuro'? –
我不记得这是否适用于rails 2.x,但在rails3中,您可以执行@evaluation = Evaluation.new(...,:neuro => Neuro.new,cardio => Cardio.new),并且所有对象都将以类似事务的方式保存。 –
不知道它是否适合我,我相信我的关系是错误的(应该有评估的forein键)。非常感谢Adam,我会尽力解决这个问题。 –