第一次无法加载 _contact_fields.html。我只能在刷新页面时添加字段。
application_helper.rb
def link_to_add_fields(name, f, association)
new_object = f.object.send(association).klass.new
id = new_object.object_id
fields = f.fields_for(association, new_object, child_index: id) do |builder|
render(association.to_s.singularize + "_fields", f: builder)
end
link_to(name, '#', class: "add_fields", data: {id: id, fields: fields.gsub("\n", "")})
end
_form.html.erb
<%= f.fields_for :contacts do |builder| %>
<%= render 'contact_fields', f: builder %>
<% end %>
<%= link_to_add_fields "Add Fields", f, :contacts %>
_contact_fields.html.erb
<fieldset class="field">
<div class="field">
<%= f.label :Contact_Name %><br>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :Contact_Email %><br>
<%= f.text_field :email %>
</div>
<div class="field">
<%= f.label :Contact_Phone %><br>
<%= f.text_field :phone_number %>
</div>
<div class="field">
<%= f.label :Additional_Info %><br>
<%= f.text_field :additional_info %>
</div>
<%= f.hidden_field :id %>
<%= f.hidden_field :_destroy %>
<%= link_to "Remove Field", "#", class: "remove_fields" %>
</fieldset>
参与者.js.咖啡
jQuery ->
$('form').on 'click', '.remove_fields', (event) ->
$(this).closest('.field').remove()
event.preventDefault()
$('form').on 'click', '.add_fields', (event) ->
time = new Date().getTime()
regexp = new RegExp($(this).data('id'), 'g')
$(this).before($(this).data('fields').replace(regexp, time))
event.preventDefault()
联系人.rb
belongs_to :participant,:foreign_key => 'participant_id'
参与者.rb
has_many :contacts
accepts_nested_attributes_for :contacts, allow_destroy: true
当我第一次点击 link_to_add_fields # 时,如下图所示 http://localhost:3000/participants/new#如果我在删除 # 后刷新相同的路径,我就可以添加字段。
最佳答案
你在使用 turbolinks 吗?发生这种情况的原因可能是 Turbolinks 正在加载页面,并且没有触发文档就绪事件。您想等到 Turbolinks 触发 page:load 事件。
要解决此问题,您可以将 javascript 调整为以下内容:
$(document).on 'click', 'form .remove_fields', (event) ->
event.preventDefault()
$(this).closest('.field').remove()
$(document).on 'click', 'form .add_fields', (event) ->
event.preventDefault()
time = new Date().getTime()
regexp = new RegExp($(this).data('id'), 'g')
$(this).before($(this).data('fields').replace(regexp, time))
上面的代码不需要 jQuery ->。
关于ruby-on-rails - 需要重新加载页面才能在 rails 4 中使用 link_to_add_fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31048054/