Estoy probando el foro beast escrito en rieles y lo usaré como un ejemplo de un problema que sigo enfrentando.validación de los rieles sobre el redireccionamiento
El foro tiene una acción de temas/presentación y se ve con un formulario en la parte inferior para crear una nueva publicación dentro del tema.
Enviando el formulario a posts/create y si la validación pasa redirige a temas/show y funciona bien, sin embargo si la validación falla (dejando fuera el campo del cuerpo) se le redirige a los mismos temas/show y volver al formulario, sin errores de validación ... Normalmente, si la validación falla, se queda en lo que sea/create con render: action => new.
¿Se están perdiendo las validaciones en la redirección y cuál es el mejor método para hacerlo funcionar?
Ver código de abajo:
PostsController.rb
def create
@post = current_user.reply @topic, params[:post][:body]
respond_to do |format|
if @post.new_record?
format.html { redirect_to forum_topic_path(@forum, @topic) }
format.xml { render :xml => @post.errors, :status => :unprocessable_entity }
else
flash[:notice] = 'Post was successfully created.'
format.html { redirect_to(forum_topic_post_path(@forum, @topic, @post, :anchor => dom_id(@post))) }
format.xml { render :xml => @post, :status => :created, :location => forum_topic_post_url(@forum, @topic, @post) }
end
end
end
TopicsController.rb
def show
respond_to do |format|
format.html do
if logged_in?
current_user.seen!
(session[:topics] ||= {})[@topic.id] = Time.now.utc
end
@topic.hit! unless logged_in? && @topic.user_id == current_user.id
@posts = @topic.posts.paginate :page => current_page
@post = Post.new
end
format.xml { render :xml => @topic }
end
end
temas/mostrar vista
<% form_for :post, :url => forum_topic_posts_path(@forum, @topic, :page => @topic.last_page) do |f| %>
<%= f.error_messages %>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td rowspan="2" width="70%">
<%= f.text_area :body, :rows => 8 %>
</td>
<td valign="top">
<%= render :partial => "posts/formatting" %>
</td>
</tr>
<tr>
<td valign="bottom" style="padding-bottom:15px;">
<%= submit_tag I18n.t('txt.views_topics.save_reply', :default => 'Save reply') %>
</td>
</tr>
</table>
<% end %>
Muchas gracias.
El flujo de trabajo parece raro – Chirantan
¿Qué quieres decir? Probablemente podría haberlo preguntado más simplemente sin el ejemplo. Básicamente, ¿qué sucede con los mensajes de error si los redirige en lugar de procesarlos, y dónde se puede acceder? – sebastyuiop