我正在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;"}
这将通过以下代码从引导程序在模式对话框中加载新表单:
addresses_controller:
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开始发布84.107.25.142的POST / / addresses 通过AddressesController处理#create as HTML
参数:{“utf8”=&gt;“✓”,“authenticity_token”=&gt;“WBBKxMftlsvHF5B6zgJw / wtBdF4IibquJQ6HrM6b0cQ =”,“address”=&gt; {“postal_code”=&gt;“5”,“数字”= &gt;“6”,“city”=&gt;“7”,“addressable_id”=&gt;“2”,“addressable_type”=&gt;“人物”},“提交”=&gt;“创建地址”}
这是地址控制器的创建动作
def create
@address = Address.new(params[:address])
respond_to do |format|
format.html
format.json { render json: @address }
format.js
end
end