Заполнение внешнего ключа при создании действия - PullRequest
1 голос
/ 26 сентября 2011

У меня есть оценка, похожая на эту:

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

Когда создается оценка, также создаются кардио и нейро, но с нулевым значением__оценки. Я пытался переместить @cardio = Cardio.new(:evaluation_id => @evaluation.id) внутрь if, но это тоже не сработало.

1 Ответ

2 голосов
/ 26 сентября 2011

@evaluation не будет иметь установленного идентификатора, пока вы его не сохраните, поэтому при оценке @neuro и @cardio @valuation.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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...