ruby-on-rails - Rails - 如何让我的远程表单使用 JS 进行响应?

标签 ruby-on-rails ruby-on-rails-3 jquery ruby-on-rails-3.2

我有一个列出项目的页面。每个项目下面列出了该项目的所有评论 (评论是项目下的嵌套资源)。

您可以在项目页面上添加新的内嵌评论。当您这样做时,它会重新加载整个页面,因此我想将其更改为使用 Ajax,并仅使用 jQuery 插入评论。

所以我将comments/_form.html.erb更改为使用:remote=>true

<%= form_for([@item,@comment], :remote=>true) do |f| %>

我在comments_controller中添加了一个format.js:

def create
  @comment = Comment.new(params[:comment])
  @comment.save

  respond_to do |format|
    format.js
    format.html { redirect_to items_path}
  end
end

并创建了一个简单的 comments/create.js.erb 以将新评论插入到页面上:

$("#comments").append("<%= j(render(@comment)) %>");

但是,当我提交评论时(即使表单上有 :remote=>true),它会不断重新加载整个页面/忽略我的 .js 文件。

所以我从respond_to中删除了format.html(因为我不想使用该选项),但随后它给了我错误Completed 406 Not Acceptable in 4ms (ActiveRecord: 0.2ms)

如何让它保留在当前页面并使用我的 create.js 进行响应?

最佳答案

我刚刚发现问题:

我正在使用 javascript 提交评论表单:this.form.submit()。当我不使用 :remote=>true 时,效果很好。但是,由于某种原因,当我制作表单 :remote=>true 时会中断。

如果我使用实际的提交按钮,我的问题中的代码可以正常工作。

或者,如果我将 JavaScript 从 this.form.submit() 更改为使用 jQuery 按 id 选择表单并提交,这也有效:

$("#new_comment_<%= @item.id %>").submit();

关于ruby-on-rails - Rails - 如何让我的远程表单使用 JS 进行响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14145615/

相关文章:

jquery - 数据表 (DT) Shiny -> 过滤器中 slider 范围的步骤

ruby-on-rails - 新的 LinkedIn 权限 : accessing past positions and educations using rails LinkedIn gem

ruby-on-rails - 如何使用正则表达式从字符串中删除一些非法字符?

ruby - 如何确定 Rails 3 模型类中的表名

ruby-on-rails-3 - 使用常规数据库而不是测试数据库进行 rspec 测试

jquery - .eq() 和 .get() 之间的区别和 :nth-child()?

jQuery 模式对话框阻止文档事件触发

ruby-on-rails - Rails - 电子邮件确认 - RecordNotFound 错误

ruby-on-rails - Rails - Devise Gem 删除注册和忘记密码模块

ruby-on-rails-3 - 如何将数组存储到Cookie中?