Rails通过javascript将新的has_many通过连接记录附加到嵌套表单

时间:2017-04-01 15:14:21

标签: javascript ruby-on-rails nested-forms

我有一个has_many通过关联,我正在尝试设置一个嵌套表单,允许通过javascript创建新的连接/子记录而不离开父表单/页面。下面适用于渲染集合的标准表单,但我不确定这个嵌套表单示例我缺少什么。

型号:

class FullApplication < ApplicationRecord
  has_many :fullapplication_districts, inverse_of: :full_application, dependent: :destroy
  has_many :districts, through: :fullapplication_districts

  accepts_nested_attributes_for :fullapplication_districts

class FullapplicationDistrict < ApplicationRecord
  belongs_to :full_application
  belongs_to :district

  validates_presence_of :full_application, :district
end

class District < ApplicationRecord
  has_many :fullapplication_districts, inverse_of: :district, dependent: :destroy
  has_many :full_applications, through: :fullapplication_districts
end

查看:

<%= form_for(@full_application, url: full_applications_edit_path, method: :put) do |f| %>
  <div id="fullapplicationdistrictlist" class='row'>
    <%= f.fields_for :fullapplication_districts do |fad| %>
      <%= fad.collection_select :district_id, District.all, :id, :name, {include_blank: true}, {class: 'form-control'} %>
      <%= fad.number_field :percent_one, class: 'form-control', step: :any %>
      <%= fad.number_field :percent_two, class: 'form-control', step: :any %>
      <%= fad.number_field :percent_three, class: 'form-control', step: :any %>
      <%= link_to full_applications_districts_path(:id), method: :delete, remote: true, data: { confirm: "Are you sure you want to delete this record?" } do %>
        <i class="fa fa-trash"></i>
      <% end %>
    <% end %>
  </div>
<% end %>
<%= link_to "Add New District", full_applications_districts_new_path(fullapplication_id: @full_application.id), method: :post, remote: true, class: "btn btn-form btn-primary", role: "button", data: {disable_with: "<i class='fa fa-spinner fa-spin'></i> Creating..."} %>

fullapplication_districs_controller

def create
    @full_application = FullApplication.find(params[:fullapplication_id])
    @fullapplication_district = FullapplicationDistrict.new(full_application_id: @full_application.id, district_id: District.first.id, percent_one: 0.0, percent_two: 0.0, percent_three: 0.0)
    respond_to do |format|
      @fullapplication_district.save
      format.js
    end
  end

create.js.erb

$('div#fullapplicationdistrictlist').append("<%= escape_javascript(render @fullapplication_district) %>");

非常感谢任何见解。

1 个答案:

答案 0 :(得分:1)

检查此railscast:http://railscasts.com/episodes/196-nested-model-form-part-1

为嵌套表单提供了很多见解。第2部分还介绍了动态添加新嵌套字段的方法。

相关问题