我正在尝试通过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?
有什么想法吗?
答案 0 :(得分:1)
//= require jquery-1.8.2
//= require jquery-1.8.24.custom.js
//= require jquery-ui
//= require jquery_ujs
//= require_tree .
这似乎已经解决了冲突,现在我的Rails AJAX调用只是花花公子!