我使用form_tag从我的一个Rails视图中的不同控制器访问一个动作。这给我带来了渲染错误信息的麻烦。我也在使用可能导致问题的JQuery。我已经读过form_tag没有绑定到模型,所以这可能意味着像validates_uniqueness_of这样的东西可能不起作用。希望通过form_tag帮助理解验证!
供参考,这是我的控制器:
# app/controllers/posts_controller.rb def create @post = Post.new @post.text = params[:text] @post.user_id = current_user.id @post.save respond_to do |format| if @post.save format.js format.html { redirect_to(username_path(:username => current_user)) } format.xml { render :xml => @post, :status => :created, :location => @post } else format.html { render :action => "new" } format.xml { render :xml => @post.errors, :status => :unprocessable_entity } end end end
我的观点(在我的用户模型上)
# app/views/users/show.html <% form_tag({:controller => "posts", :action => "create"}, :method => "post", :class => 'newpost') do %> <%= error_messages_for :post %> <%= text_field_tag :text, params[:text] %> <%= image_submit_tag("../images/add.png", :border => 0, :class => "submitadd") %> %lt;% end %>
答案 0 :(得分:2)
我认为问题在于您可能会双重保存并以某种方式清除某些错误消息。您可以尝试以下方法:
# app/controllers/posts_controller.rb def create @post = Post.new @post.text = params[:text] @post.user_id = current_user.id respond_to do |format| if @post.save format.js format.html { redirect_to(username_path(:username => current_user)) } format.xml { render :xml => @post, :status => :created, :location => @post } else format.html { render :action => "new" } format.xml { render :xml => @post.errors, :status => :unprocessable_entity } end end end
调用render:action =&gt; 'new'您应该能够通过以下方式查看错误消息:
<%= error_messages_for @post %>
您也可以通过在日志中显示@ post.errors来验证是否存在错误。