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

时间:2015-04-15 08:33:10

标签: ruby-on-rails forms collection-select

我如何拥有一个有5个选项可供选择的collection_select,当选择任何一个时,它不能再次被选中(即如果先选择1,那么只有2,3,4,5可供选择)。

我有两张桌子:发票和Invoice_Line_Items,发票has_many Invoice_Line_items。 Invoice_Line_Items belongs_to Invoice。选项是关系。例如,我不能为同一项目开两次发票。

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

谢谢

1 个答案:

答案 0 :(得分:1)

你需要一些javascript。下面的示例仅基于两个下拉菜单,一旦选择了第二个下拉列表中的第一个选项列表中的选项列表中删除了该值,但您应该能够根据需要调整此值。注意&#34; collect_2.remove(collect_1.value - 1)&#34; part - 这是因为下拉对象的计数从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>