def create
@customer = Customer.find(params[:customer_id])
@delivery = @customer.deliveries.build(params[:delivery])
@document = @customer.build_document(params[:document])
if @delivery.valid? and @document.valid?
Delivery.transaction do
@delivery.save!
@document.save!
end
flash[:success] = "Consegna effettuata."
respond_with(@customer)
else
@products = Product.all
render 'customers/show', :layout => 'delivery'
end
end
When @delivery and @document are saved it redirects to customer show.
I do customer show also at application startup, after a search.
How can I know if the show is a redirect from Delivery create?
You can always just set an @variable in the create action and test it
in the view. Don't call it '@coming_from_create' though, call it
something that indicates what is required of the view. If you call it
@coming_from_create then it is almost guaranteed that a some point you
will want to set in some other circumstance also, and then the name
will not make sense.
I would advise against that method. The view should not be making
decisions based on where it came from, it should be displaying what it
is told to display. If a particular action (create in this case)
requires something particular of a view then the action should tell
the view what to do by setting an @variable. The view should not be
saying 'I see that I came from the create action therefore I will
display this', it should be saying 'I see that this variable contains
this data so I will display the data as requested'.
@Mauro, what is the difference you wish to see in the view based on
where it came from?
If the view is a redirect from Delivery create I want to see the
message "create success" and a button "print" to print something.
I the same view comes from the search customers action I want to see
the message "already delivered" if customer.deliveries.count > 0 and a
link "want to continue?"