单页导轨上的多个表单

时间:2012-05-09 11:21:35

标签: ruby-on-rails ruby-on-rails-3.2

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

0 个答案:

没有答案