私は最初にあなたとモデルfails_validation?
の両方にメソッドを追加して問題をチェックする ことによってこれにアプローチします。Issues
Comments
次に、@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
最も洗練されたソリューションではありませんが、機能するはずです。