jquery – Rails 3.1 AJAX表单 – “ActionView :: Template :: Error(未定义方法`gsub’表示#):”

前端之家收集整理的这篇文章主要介绍了jquery – Rails 3.1 AJAX表单 – “ActionView :: Template :: Error(未定义方法`gsub’表示#):”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我刚刚更新到Rails 3.1并且创建模型对象的典型ajax表单在成功时产生以下错误:ActionView :: Template :: Error(未定义的方法gsub’用于#< ActionDispatch :: Flash :: FlashHash:0x00000102b73b78> ):

创建操作进展顺利,数据被提交到数据库,但页面不会更改,并且js不会执行.如果出现错误,js DOES可以正常工作,产生错误消息……所以只有成功产生错误并且无法执行js.

这是我的代码

控制器:

  1. def create
  2. @contact = Contact.new(params[:contact])
  3. respond_to do |format|
  4. if @contact.save
  5. flash[:notice] = "Welcome!"
  6. format.html
  7. format.js
  8. else
  9. format.html { render 'pages/home'}
  10. format.js
  11. end
  12. end
  13. end

查看表单

  1. <div id="contact_notice"></div>
  2. <%= form_for @contact,:remote => true do |f| %>
  3. <%= f.text_field :email,:id => 'email','data-default' => 'Sign up to join the beta!' %><%= f.submit "Submit",:id => 'submit' %>
  4. <% end %>

/views/contacts/create.js.erb

  1. <% if @contact.errors.any? %>
  2.  
  3. // Create errors
  4. var errors = $('<div class="flash notice"></div>');
  5. <% @contact.errors.full_messages.each do |error| %>
  6. errors.append('<%= escape_javascript( error ) %>');
  7. <% end %>
  8.  
  9. // Display errors
  10. $("#contact_notice").html(errors);
  11.  
  12. <% else %>
  13.  
  14. // Display success (clearing any errors)
  15. $("#contact_notice").html('<div class="flash notice"><%=escape_javascript(flash.delete(:notice)) %></div>');
  16. <% end %>

这是保存新联系人时的堆栈跟踪:

  1. Rendered contacts/create.js.erb (0.6ms)
  2. Completed 500 Internal Server Error in 13ms
  3.  
  4. ActionView::Template::Error (undefined method `gsub' for #<ActionDispatch::Flash::FlashHash:0x000001042b1970>):
  5. 12: <% else %>
  6. 13:
  7. 14: // Display success (clearing any errors)
  8. 15: $("#contact_notice").html('<div class="flash notice"><%= escape_javascript(flash.delete(:notice)) %></div>');
  9. 16:
  10. 17: <% end %>
  11. app/views/contacts/create.js.erb:15:in `_app_views_contacts_create_js_erb__3535867194219445180_2168748520'
  12. app/controllers/contacts_controller.rb:6:in `create'

如果你能看到我在这里缺少的东西,请告诉我.谢天谢地.

解决方法

Rails改变了3.1中的一些工作方式,从我的理解Rails 3.1不再使用 Hash for FlashHash它们现在基于 Enumerable Here is an answer更详细.你应该可以使用:
  1. flash.discard(:notice)

而不是旧的:

  1. flash.delete(:notice)

猜你在找的jQuery相关文章