Note the difference between "redirect_to" which sends a redirect
response header and new URL to the user-agent vs. "render" which
stays at the same URL and provides the content of the "new" view.
Yes, this is the default behavior. When you post invalid data it renders rather than redirects. One reason is this way you don’t need to maintain state across the redirect.