Rails ajax表单返回缺少的模板

时间:2012-10-23 08:36:20

标签: jquery ruby-on-rails-3.1 form-for

我正在尝试通过AJAX提交嵌套表单,但我似乎无法弄明白。我一直在寻找解决方案,但都是徒劳的。我在这里看到了一些类似的问题,但没有一个有用的答案。我在application.html.erb布局,所有宝石等中都有所有必要的内容。使用Rails 3.1.1和Ruby 1.9.2p290。

以下是我的模特......

class Parent < ActiveRecord::Base
    has_many :children, :dependent => :destroy
    accepts_nested_attributes_for :children
end

class Child < ActiveRecord::Base
    belongs_to :parent
end

这是我的表格......

<%= form_for @parent.children.new, :remote => true do |t| %>

# form fields...

<%= t.submit 'Save', :class => 'button close_modal', :id => 'submit_button' %>

我的孩子控制器......

respond_to :html, :js, :json

def create
    @child = Parent.create(params[:child])
    respond_with(@child.parent)
end

最后我在views / children文件夹中的create.js.erb文件(这只是为了测试)......

$("#notice").html('this works')

如果以上所有方法都不起作用,我尝试将此脚本添加到表单中...

jQuery.ajaxSetup({ 
    'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")}
});

$("#submit_button").submit(function(){
    $.post($(this).attr("action"), $(this).serialize(), null, "script");
    return false;
})

但仍然没有运气。我在这里显示的代码将通过子控制器提交表单,然后将我重定向回父/ show视图,这是子表单的位置。但如果我从子控制器中删除“responds_with(@ child.parent)”,我会收到以下错误...

Template is missing

Missing template children/create, application/create with 
{:handlers=>[:erb, :builder, :coffee], :formats=>[:html], :locale=>[:en, :en]}. 
Searched in: * "C:/Users/Owner/My Documents/Aptana Studio 3 Workspace/my_app/app/views" 
* "c:/Ruby192/lib/ruby/gems/1.9.1/gems/devise-1.5.2/app/views"

所以在任何一种情况下,我都猜测表单不是通过AJAX提交的。我不明白为什么。我对Rails和一般的编程有些新意,所以我不太了解Rails框架幕后发生的事情。

另一个可能相关或可能不相关的注释,我注意到当我展示它时,我的一些jQuery不能用于隐藏div中的元素。例如,我正在处理的这个表单是通过显示一个隐藏的div来通过jQuery呈现的,看起来我必须重新编写部分本身的一些按钮脚本,因为我已经包含在应用程序中的脚本.js文件对这些按钮不起作用,就像在其余按钮上一样。

但是,我不认为这是问题所在,因为我将表单直接放在视图中(未隐藏),但它仍然无法正常工作。

修改

我现在已经注意到表单是通过HTML提交的,而不是JS。因此,出于某种原因,Rails jQuery没有绑定到表单并覆盖默认的提交操作。可能导致什么?

修改

经过进一步研究,我怀疑这个问题与我使用ThemeRoller的自定义jQuery文件这一事实有关。有什么我应该做的,以确保我的自定义jQuery不会干扰内置的Rails jQuery?

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

啊哈哈!所以事实证明我是两次包含jQuery库,而且我假设顺序错误。我从ThemeRoller下载了一个自定义jQuery主题,我在application.html.erb文件中有一个指向Google CDN的链接。所以我在我的应用程序标题中删除了对Google CDN的引用,然后在我的application.js文件中包含一些“// = require”行来引用我的自定义jQuery文件。

//= require jquery-1.8.2
//= require jquery-1.8.24.custom.js
//= require jquery-ui
//= require jquery_ujs
//= require_tree .

这似乎已经解决了冲突,现在我的Rails AJAX调用只是花花公子!