带有form_tag的错误消息在单独的控制器Rails 3中

时间:2011-02-01 02:14:33

标签: jquery ruby-on-rails-3

我使用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 %>

1 个答案:

答案 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来验证是否存在错误。