【问题标题】:Error Messages with form_tag in separate controller Rails 3单独控制器 Rails 3 中带有 form_tag 的错误消息
【发布时间】:2011-06-18 23:55:40
【问题描述】:

我在我的一个 Rails 视图中使用了 form_tag 来访问来自不同控制器的操作。这给我渲染错误消息带来了麻烦。我也在使用可能导致问题的 JQuery。我已经读过 form_tag 没有绑定到模型,所以这可能意味着像 validates_uniqueness_of 这样的东西可能不起作用。希望能帮助您理解 form_tag 的验证!

作为参考,这是我的控制器:

# 应用程序/控制器/posts_controller.rb 定义创建 @post = Post.new @post.text = 参数[:text] @post.user_id = current_user.id @post.save respond_to 做 |格式| 如果@post.save 格式.js format.html { redirect_to(username_path(:username => current_user)) } format.xml { 渲染 :xml => @post, :status => :created, :location => @post } 别的 format.html { 渲染 :action => "new" } format.xml { 渲染 :xml => @post.errors, :status => :unprocessable_entity } 结尾 结尾 结尾

我的观点(在我的用户模型上)

# app/views/users/show.html "posts", :action => "create"}, :method => "post", :class=> 'newpost') %> 0, :class=> "submitadd") %> %lt;% 结束 %>

【问题讨论】:

  • 您遇到了什么问题?
  • 服务器输出显示消息发布,但没有返回错误消息。当输入与验证匹配时,post 工作,当它没有在浏览器中发生任何事情时。

标签: jquery ruby-on-rails-3


【解决方案1】:

我认为问题在于您可能正在双重保存并以某种方式清除了一些错误消息。您可以尝试以下方法:

# 应用程序/控制器/posts_controller.rb 定义创建 @post = Post.new @post.text = 参数[:text] @post.user_id = current_user.id respond_to 做 |格式| 如果@post.save 格式.js format.html { redirect_to(username_path(:username => current_user)) } format.xml { 渲染 :xml => @post, :status => :created, :location => @post } 别的 format.html { 渲染 :action => "new" } format.xml { 渲染 :xml => @post.errors, :status => :unprocessable_entity } 结尾 结尾 结尾

在调用 render :action => 'new' 之后,您应该能够通过以下方式查看错误消息:

您也可以通过在日志中显示@post.errors 来验证是否存在错误。

【讨论】:

  • 我的服务器输出上仍然没有看到任何内容。就好像 format.html {render :action => "new"} 没有做任何事情。我尝试渲染@post.error,它看起来像一个错误正在传递到我的服务器输出,但我不确定如何在我的视图中访问它。
  • 我也用这些信息更新了我的答案。渲染 :action => 'new' 是正确的。
  • 当我尝试保存无法验证的内容时,从控制台工作时,@post.save 出现错误。然后调用 @post.errors 会返回一条错误消息。我正在使用 Jquery 提交表单 - 无论我做什么,POST 都会显示在我的服务器输出上。 POST 之后,在服务器输出的末尾也显示了渲染的 posts/new.html.erb,所以我不确定为什么错误消息没有随它一起显示。非常感谢您的帮助!
  • 那么您是在 POST 请求之后重定向用户还是 AJAX 调用?如果您的代码中保存不成功,则您没有 format.js 调用。您如何处理 AJAX 响应?
  • 啊啊啊——我的错。我没有处理它。感谢您的帮助。当我关闭 AJAX 时,它可以完美运行。
猜你喜欢
  • 1970-01-01
  • 2013-12-12
  • 2014-02-13
  • 2015-10-16
  • 1970-01-01
  • 1970-01-01
  • 2014-12-27
  • 2016-05-17
  • 1970-01-01
相关资源
最近更新 更多