Ruby on rails 在创建操作上填充外键
我的评估与此类似:Ruby on rails 在创建操作上填充外键,ruby-on-rails,foreign-keys,Ruby On Rails,Foreign Keys,我的评估与此类似: 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) @
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.rb
has_one :cardio
has_one :neuro
belongs_to :evaluation
belongs_to :evaluation
Cardio.rb
has_one :cardio
has_one :neuro
belongs_to :evaluation
belongs_to :evaluation
Neuro.rb
has_one :cardio
has_one :neuro
belongs_to :evaluation
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
创建评估时,也会创建cardio和neuro,但评估id为空。
我试图将
@cardio=cardio.new(:evaluation\u id=>@evaluation.id)
移动到的if
中,但它也不起作用。@evaluation
在保存之前不会设置id,因此在创建@neuro
和@cardio
时@evaluation.id将为零。换言之:
@evaluation = ...
if (@evaluation.save!)
@neuro = Neuro.new(:evaluation_id => @evaluation.id)
@cardio = Cardio.new(:evaluation_id => @evaluation.id)
if (@neuro.save! && @cardio.save!)
redirect_to evaluation_path(@evaluation.id), :notice => "Evaluation created"
else
render ("new")
end
else
render ("new")
end
谢谢,伙计,它起作用了。但假设我还有7或8种评估类型(心脏、神经、现场测试等),有没有更“漂亮”的方法,或者我必须像我在@cardio
和@neuro
上所做的那样手动设置foring键?我不记得这在rails 2.x中是否有效,但在rails3中,您可以执行@evaluation=evaluation.new(…,:neuro=>neuro.new,:cardio=>cardio.new),所有对象都将以类似事务的方式保存。不知道它是否适用于我,我相信我的关系是错误的(应该在评估时使用forein键)。非常感谢Adam,我将尝试修复此问题。