Forum: Ruby on Rails How do you pass a Validation error to a view using redirect_to ?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
67139543e0d4807cb1d34dfe02e96b9d?d=identicon&s=25 fredmsun (Guest)
on 2009-01-01 09:56
(Received via mailing list)
Hi All

I have a problem with passing Validation error messages from my model
'Visitor' to my view 'index.html.erb'.
When I pass an invalid surname from the form on my view, I correctly
get an invalid response on my error page when I use the render :action
=> 'error command in my controller.

However I want this error message to appear on my index page and I
want the form to be redirected to this page.

My question is how can I pass the error failure from my model to the
view, using a redirect_to?

Many thanks, and Happy New Year!

Ben...


index_controller.rb
=============

  def create
    @visitor = Visitor.new(params[:visitor])

    respond_to do |format|
      if @visitor.save
        format.html { redirect_to :action => 'index' }
      else
        # format.html  { render :action => 'error' }
        # format.html  { render :controller => 'index', :action =>
'index' }
        format.html { redirect_to :action => 'index' }
      end
    end
  end


index.html.erb
==========
      <p class="form_failure clear"><%= error_messages_for 'visitor'
%></p>


visitor.rb
======

class Visitor < ActiveRecord::Base

  validates_presence_of :surname, :message => 'is invalid!'

end
26a81e5badb9e002ab9ed3542036e584?d=identicon&s=25 Michael Libby (Guest)
on 2009-01-01 12:27
(Received via mailing list)
On Wed, Dec 31, 2008 at 5:23 PM, fredmsun <fredmsun@fastmail.fm> wrote:

> My question is how can I pass the error failure from my model to the
> view, using a redirect_to?

Redirect wipes out things like instance variables because you are
making the browser ask for a new page.

The flash is there to pass stuff from one action to the next. You can
either pass the error messages... or even your whole invalid object
along.

Example usage in:

ri ActionController::Flash

-Michael

--
Michael C. Libby
www.mikelibby.com
67139543e0d4807cb1d34dfe02e96b9d?d=identicon&s=25 fredmsun (Guest)
on 2009-01-01 22:07
(Received via mailing list)
Thanks Mike

I've finally figured out the problem.
The reason I didn't use render was that when I did my page kept
forwarding onto an unwanted URL route, so I used redirect_to, but I
didn't really think about the fact that I would loose the request data
as redirect_to is a new request.

Anyway it turns out that because I was using index_controller.rb and a
view called index.html.erb that some how this was affecting my
routing.
I then switched to using a different RESTful resource and used render
and it all worked like clockwork.

Thanks for the pointers,

Ben...
This topic is locked and can not be replied to.