我为客户提供了collection_select
,可以选择使用模式添加新客户端。我希望select2 collection_select
能够使用新客户端进行更新,并将值设置为新添加的客户端。
在父表单中,我有:
<%= f.collection_select :client_id, @clients, :id, :name, { label: 'Client', prompt: true, autofocus: true, required_flag: true }, { class: 'form-control js-example-basic-single', autofocus: true } %>
<div class='form-group'>
<%= link_to 'Add a New Client', '#new_client_modal', 'data-toggle' => 'modal' %>
</div>
在客户控制器中我有:
@clients = Client.where(account_id: current_account.id)
format.html { redirect_to client_url(@client) }
format.js { render action: 'show', status: :created, location: @client }
在show.js.erb中我有:
$('#new_client_modal').modal_success();
$(".js-example-basic-single").val("<%=j @client.id.to_s %>").trigger("change");
<% flash.each do |type, message| %>
$('#flash_messages').html("<%=j render 'layouts/error' %>")
<% end %>
我们的想法是关闭添加客户端模式,然后使用新的@clients`选项更新select2集合选择。希望用@clients更新集合选择并将值设置为@client。
请注意,我使用的是select2版本4.0。
答案 0 :(得分:0)
可能是一个更好的方法,但这就是我最终的结果:
#define PUT(p, val) (*(unsigned long *)(p) = (val))
#define SET_NEXT_PTR(p, ptr) (*(char**)(p) = (char*)((unsigned long)(ptr)))
data命令将最近添加的客户端添加到下拉列表中,但位于底部。理想情况下,我必须删除下拉选项,然后添加完整的客户端列表。目前,这是有效的,因为将所选值设置为最近添加的客户端。