私は最初にあなたとモデルfails_validation?の両方にメソッドを追加して問題をチェックする ことによってこれにアプローチします。IssuesComments
次に、@issueフォームデータを手動でロードし、params[]保存する前に検証する必要があります(使用できませんupdate_attributes(params[:issue]))。新しいデータを作成し、Commentを介してロードしparams[]ます。edit次に、両方のモデルで検証をテストし、どちらかが失敗した場合はアクション に戻ることができます。
両方が合格した場合は、保存@issueしてから@comment通常どおりに保存できます。
def update
@issue = Issue.find(params[:id])
# manually transfer form data to the issue model
@issue.title = params[:issue][:title]
@issue.body = params[:issue][:body]
#...
@comment = @issue.comments.new(params[:comment])
# validate both @issue and @comment
if @issue.fails_validation? || @comment.fails_validation?
flash[:error] = "Your edits or your comment did not pass validation."
render :action => "edit",
end
# validation passed, save @issue then @comment
respond_to do |format|
if @issue.save
@comment.save
format.html { redirect_to @issue, notice: 'Issue successfully updated. Comment created' }
format.json { head :ok }
else
format.html { render action: "edit" }
format.json { render json: @issue.errors, status: :unprocessable_entity }
end
end
end
最も洗練されたソリューションではありませんが、機能するはずです。