He estado trabajando con rieles por un tiempo, pero pensé en probar un curso para consolidar mi conocimiento.
Pero ya me quedé perplejo con una acción básica de guardar/error.
Estoy tratando de mostrar mensajes de error después de que falla la validación del modelo.
Si falla la validación del modelo, vuelvo render 'new' , donde la instancia del modelo debería tener mensajes de error. Pero si trato de imprimir los mensajes de error como <%= modelinstance.errors.inspect %> , solo muestra una matriz vacía.
Lo extraño es que, si en cambio render :new, status: :unprocessable_entity , con mucho gusto renderiza todo el error.
Me preguntaba por qué este es el caso, cuando la guía Ruby on Rails permite la versión de cadena.
Controlador:
... def index articles = Article.all render locals: { articles: articles } end def new @article = Article.new end def create @article = Article.new(article_params) if @article.save redirect_to @article else render :new, status: :unprocessable_entity end end ...Vista:
<h1>Create a new article</h1> <% if @article.errors.any? %> <h2>The following errors prevented the article from saving:</h2> <% @article.errors.full_messages.each do |msg| %> <%= msg %> <% end %> <% end %> ... <%= form_with scope: @article, url: articles_path, local: true do |f| %> <p> <%= f.label :title %> <%= f.text_field :title %> </p> <p> <%= f.label :description %> <%= f.text_area :description %> </p> <p> <%= f.submit %> </p> <% end %>' ...Se debe a la introducción de Turbo en Rails 7. Sin ese estado, Turbo realmente no sabría qué hacer con los redireccionamientos.
Puede leer más sobre esto aquí: https://turbo.hotwired.dev/handbook/drive#redirecting-after-a-form-submission
De lo contrario, podría simplemente deshabilitar Turbo y debería volver a "normal".