Question

I'm building a page with a simple contact form. After users submit the form, I'd like it to redirect back to that exact same page and then flash a success message. But the reason I'm not using a show is because I want to have a brand new contact form (not what they already submitted), in case they want to submit another request. However, the redirect_to doesn't appear to be working.

Thanks for the help!

My controller (note I've tried render instead of redirect_to as well)

def create
    @contact= Contact.new(secure_params)
    if @contact.save
      flash[:success] = "Thanks! I'll be in touch soon!"
      redirect_to 'new'
    else
      render 'new'
    end
end

My view

<body>
<h1> opening text </h1>

<!--prints success message, making it a hash just in case other messages need to be added in the future -->
<% flash.each do |key, value| %>
    <div class="alert alert-<%= key %>"><%= value %></div>
<% end %>


<%= form_for @contact do |f| %>
<!--form code below -->
Was it helpful?

Solution

Change it to

if @contact.save
  flash[:success] = "Thanks! I'll be in touch soon!"
  redirect_to :action => 'new'
else
  render :action => 'new'
end

redirect_to expects a url/relative path as a string, or a Hash that points to a url

eg:

"/user/10"
"http://localhost:3000/users/new" 
or  {:controller => 'users', :action => 'new'}

But when you give redirect_to 'new', It is looking for '/new'

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top