diff options
author | francis <francis> | 2007-09-12 15:56:18 +0000 |
---|---|---|
committer | francis <francis> | 2007-09-12 15:56:18 +0000 |
commit | 35dbd9e483b61011aff96b3297545b5b3bb2686f (patch) | |
tree | 5596c8a8dd1391d2636cc02aab75d0cb02e05135 /app/controllers/file_request_controller.rb | |
parent | 565fbcbe0e8ef9c3247469168da6705f842cce32 (diff) |
Use the other model itself, rather than its id, when saving two models at once,
so that you don't get spurious error. This means if you forget to save the one
before the other you are screwed, but hey.
Instead of a transaction, just call valid? on both models first.
Diffstat (limited to 'app/controllers/file_request_controller.rb')
-rw-r--r-- | app/controllers/file_request_controller.rb | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/app/controllers/file_request_controller.rb b/app/controllers/file_request_controller.rb index d9f22d804..ab9390a4f 100644 --- a/app/controllers/file_request_controller.rb +++ b/app/controllers/file_request_controller.rb @@ -4,31 +4,32 @@ # Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved. # Email: francis@mysociety.org; WWW: http://www.mysociety.org/ # -# $Id: file_request_controller.rb,v 1.7 2007-09-11 15:21:30 francis Exp $ +# $Id: file_request_controller.rb,v 1.8 2007-09-12 15:56:18 francis Exp $ class FileRequestController < ApplicationController def index + # render index.rhtml template end +# before_filter :check_authentication, :only => [:create] def create + # Create both FOI request and the first request message @info_request = InfoRequest.new(params[:info_request]) @outgoing_message = OutgoingMessage.new(params[:outgoing_message].merge({ :status => 'ready', :message_type => 'initial_request' })) + @outgoing_message.info_request = @info_request # Save both models - ActiveRecord::Base.transaction do - begin - @info_request.save! - @outgoing_message.info_request_id = @info_request.id - @outgoing_message.save! - # render create action - rescue ActiveRecord::RecordInvalid => e - @outgoing_message.valid? # force cecking of errors even if info_request fails - render :action => 'index' - end + valid = @info_request.valid? + valid &&= @outgoing_message.valid? # XXX maybe there is a nicer way of preventing lazy boolean evaluation than this + if valid + @info_request.save! + @outgoing_message.save! + else + render :action => 'index' end end |