如何在 rails 中使用具有唯一值的 collection_select?

How to use collection_select with unique values in rails?

我怎样才能让 collection_select 有 5 个选项可供选择,当其中一个被选中时,下一个就不能再被选中(即,如果先选中 1,那么只有 2,3,4, 5 个可供选择)。

我有两个表:invoices 和 Invoice_Line_Items,invoice has_many Invoice_Line_items。 Invoice_Line_Items belongs_to 发票。选项是关系。例如,我不能为同一件商品开具两次发票。

<%= collection_select( :invoice_line_item, :invoice_line_item_id, @invoice_line_items, :id, :supplier_id, {}, {:multiple => true}) %>

谢谢

为此您需要一些 javascript。下面的示例仅基于两个下拉列表,第一个的值在选择后从第二个的选项列表中删除,但您应该能够根据需要的数量进行调整。注意 "collect_2.remove(collect_1.value - 1)" 部分 - 这是因为下拉对象的计数从 0 开始,但它们的值从 1 开始 - 有点混乱!

<!DOCTYPE html>
<html>
<body>

<%= form_tag("/users", method: "get", name:"frm") do %>  
    <%= collection_select(:invoice_line_item, :invoice_line_item_id, @invoice_line_items, :id, :supplier_id, {},{onchange: "myFunction()",id:"collect-1", multiple: true }) %><br>
    <%= collection_select(:invoice_line_item, :invoice_line_item_id, @invoice_line_items, :id, :supplier_id, {},{id:"collect-2", multiple: true}) %><br>   
  <%= submit_tag("Go") %>
<% end %>

<script>
function myFunction() {  
    var collect_1 = document.getElementById("collect-1");
    var collect_2 = document.getElementById("collect-2"); 
    collect_2.innerHTML = collect_1.innerHTML;
    collect_2.remove(collect_1.value - 1);    
}   
</script>

</body>