我正在 Rails 3.2 中构建一个 Web 应用程序,其中我有一个人模型,它有多个与之关联的地址。现在我正在尝试通过此人的编辑窗口添加新地址。
要创建页面布局,我使用 bootstrap。
我创建了一个简单的编辑视图,我能够编辑一个人的所有详细信息,并且它有一个简单的表格,显示与其关联的地址。此视图是使用 simple_form_for 创建的,并且没有将远程标记设置为 true。
在表格下方有一个按钮,可以远程加载新地址的视图,这是通过以下代码完成的:
=link_to 'Add new address', new_address_path(:addressable_id => @person.id, :addressable_type => @person.class.name), :data => {:toggle => "modal", :target => "#newAddressWindow"}, :remote => true, :class => 'btn'
.modal#newAddressWindow{:style => "display: none;"}
这将通过以下代码从引导程序在模式对话框中加载一个新表单:
地址控制器:
def new
@address = Address.new
@address.addressable_type = params[:addressable_type]
@address.addressable_id = params[:addressable_id]
respond_to do |format|
format.html
format.json { render json: @address }
format.js
end
end
地址/new.js.erb
if ($("#newAddressWindow").is(':empty')) {
$("#newAddressWindow").append(
"<%= escape_javascript(render :partial => 'form') %>"
);
}
地址/_form.html.haml
= simple_form_for(@address, :remote => true) do |f|
.modal#myModal
.modal-header
%button.close{:href => "#", :data => {:dismiss => "modal"}}x
%h3 Adres
.modal-body
= f.input :postal_code
= f.input :number
= f.input :city
= f.input :addressable_id, :as => :hidden
= f.input :addressable_type, :as => :hidden
.modal-footer
%a.btn{:href => "#", :data => {:dismiss => "modal"}} Close
= f.button :submit, :class => "btn-primary"
现在我想要的是提交地址并在人的表格中显示新提交的地址。但是当我按下提交按钮时,地址的创建操作被称为正常的 html 调用,正如我从服务器日志中看到的那样,由于表单中的远程,我希望它是对服务器的 ajax 调用。提交后,服务器还会将地址的创建页面重定向给我。
这是我在服务器日志中看到的:
在 2012-05-09 13:10:14 +0200 开始 POST "/addresses" for 84.107.25.142 由 AddressesController#create as HTML 处理
参数:{"utf8"=>"✓", "authenticity_token"=>"WBBKxMftlsvHF5B6zgJw/wtBdF4IibquJQ6HrM6b0cQ=", "address"=>{"postal_code"=>"5", "number"=>"6", "city "=>"7", "addressable_id"=>"2", "addressable_type"=>"Person"}, "commit"=>"创建地址"}
这是地址控制器的创建动作
def create
@address = Address.new(params[:address])
respond_to do |format|
format.html
format.json { render json: @address }
format.js
end
end