how to know who did the redirect.

Controller Delivery:

def create
    @customer = Customer.find(params[:customer_id])
    @delivery =[:delivery])
    @document = @customer.build_document(params[:document])
    if @delivery.valid? and @document.valid?
      Delivery.transaction do!!
      flash[:success] = "Consegna effettuata."
      @products = Product.all
      render 'customers/show', :layout => 'delivery'

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.


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?


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

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.