我有以下内容:
routes.rb中:
resources :posts do
resources :replies
end
replies_controller.rb:
class RepliesController < ApplicationController
def create
@post = Post.find(params[:post_id])
@reply = @post.replies.build(params[:reply])
@reply.user_id = current_user.id
if @reply.save
flash[:success] = "reply created!"
redirect_to post_path(@post)
else
redirect_to post_path(@post)
end
end
回复/ _form.html.erb:
<%= form_for([@post, @post.replies.build]) do |f| %>
<%= render 'shared/error_messages', object: f.object, target: @reply %>
<div class="field">
<%= f.text_area :content, placeholder: "Enter reply content" %>
</div>
<%= f.submit "Reply", class: "btn btn-large btn-primary" %>
<% end %>
帖/ show.html.erb:
<div class="span8">
<%= render 'replies/form' %>
</div>
共享/ error_messages.html.erb:
<% if object.errors.any? %>
<div id="error_explanation">
<div class="alert alert-error">
The form contains <%= pluralize(object.errors.count, "error") %>.
</div>
<ul>
<% object.errors.full_messages.each do |msg| %>
<li>* <%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
我不确定为什么replies
的错误消息没有显示,因为我正在使用target: @reply
(:content和:user_id是必需的)。
有任何解决此问题的建议吗?
答案 0 :(得分:4)
在create method的 else 部分中,您必须渲染post_path(@post)而不是重定向post_path(@post)
在创建部分的 else 部分尝试此操作
render :template => 'posts/show'
这样您当前的 @reply 对象将会保留您的错误消息。
redirect_to post_path(@ post)将在show action中重新定义 @reply 对象(我假设您已在其中定义了@reply对象)。
在 posts / show 操作中,在那里构建您的回复对象并将其分配给@reply实例对象。
@reply = @post.replies.build
现在在回复/ _form.html.erb :
将@ post.replies.build更改为@reply
即
<%= form_for([@post, @post.replies.build]) do |f| %>
到
<%= form_for([@post, @reply]) do |f| %>
同时将 @reply 分配给对象变量,同时渲染'shared / error_messages'部分,
<%= form_for([@post, @reply]) do |f| %>
<%= render :partial => 'shared/error_messages', :locals => {:object => @reply} %>
<div class="field">
<%= f.text_area :content, placeholder: "Enter reply content" %>
</div>
<%= f.submit "Reply", class: "btn btn-large btn-primary" %>
<% end %>
还为共享文件夹( shared / _error_messages )中的error_messages设置部分内容。在此部分粘贴您的代码,该代码位于 shared / error_messages
中<% if object.errors.any? %>
<div id="error_explanation">
<div class="alert alert-error">
The form contains <%= pluralize(object.errors.count, "error") %>.
</div>
<ul>
<% object.errors.full_messages.each do |msg| %>
<li>* <%= msg %></li>
<% end %>
</ul>
</div>