1

我正在 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
4

0 回答 0