2017-04-01 59 views
0

我有一个has_many通过关联,我试图设置一个嵌套窗体,允许通过javascript创建新的连接/子记录而不会离开父窗体/页。下面的代码对集合被渲染的标准表单起作用,但我不确定这个嵌套表单示例中缺少什么。Rails将新的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) %>"); 

非常感谢任何见解。

回答