how to know who did the redirect.

Controller Delivery:

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.

Colin

You can use request.env[‘HTTP_REFERER’]

if request.env[‘HTTP_REFERER’] == new_costumer_url

You can use request.env['HTTP_REFERER']

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?

Colin

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?"

Store this info in flash

flash[:success] = "Consegna effettuata." flash[:redirect_from] = :something respond_with(@customer)

Then you can read it later.

Robert Pankowecki

then use that in the show controller.

@something = request.env[‘HTTP_REFERER’] == show_url ? option1 : option2

then use @something in the view.

I think Colin is right and the solution is more simple than I thought. I check flash[:success] if it is nil or not.