有没有办法根据另一个下拉列表值过滤下拉列表?
例如,如果我们有Class
和Student
模型Student
有class_id
;有没有办法根据所选的Class
?
修改
显然,rails_admin gem与我正在寻找的association
关系;但它并没有完美地发挥作用。
答案 0 :(得分:1)
如果您可以使用Javascript,则此Railscast会对您有所帮助:
在这种情况下,您的下拉列表可能如下所示:
<%= f.collection_select :class_id, Class.all, :id, :name, {:prompt => "Select a Class"}, {:id => "class"} %>
<%= f.collection_select :student_id, Student.all, :id, :name, {:prompt => "Select a Student"}, {:id => "student"} %>
您可以使用Javascript更改学生下拉列表中的选项。您可以使用以下方法获取课程的价值:
class_id = $("#class").find(":selected").text()
答案 1 :(得分:1)
鉴于两个<select>
元素"Class"
和"Student"
,Student
列表包含data-class_id
个属性,引用Class
列表中的值(请参阅在下面的代码段中,您可以使用以下vanilla-JavaScript代码根据"Student"
下拉列表值过滤"Class"
下拉列表:
var firstSelectId = "Class";
var secondSelectId = "Student";
var data_attr = "class_id";
this.addEventListener("DOMContentLoaded", function(event) {
var firstSelect = document.getElementById(firstSelectId);
var secondSelect = document.getElementById(secondSelectId);
firstSelect.addEventListener("change", function(event) {
var value = event.target.value;
Array.prototype.forEach.call(secondSelect.options, function(item) {
item.style.display = (item.dataset[data_attr] === value) ? 'inline' : 'none';
});
var selected = secondSelect.selectedOptions[0];
if (selected && selected.dataset[data_attr] !== event.target.value) {
secondSelect.selectedIndex = -1;
}
});
firstSelect.dispatchEvent(new Event('change'));
});
&#13;
<form id="myform">
Select a class and student:
<select id="Class">
<option value="1">Class1</option>
<option value="2">Class2</option>
<option value="3">Class3</option>
</select>
<select id="Student">
<option value="StudentA" data-class_id="1">A</option>
<option value="StudentB" data-class_id="2">B</option>
<option value="StudentC" data-class_id="3">C</option>
<option value="StudentD" data-class_id="2">D</option>
<option value="StudentE" data-class_id="1">E</option>
<option value="StudentF" data-class_id="1">F</option>
</select>
</form>
&#13;
答案 2 :(得分:0)
这是相关链接:https://github.com/sferik/rails_admin/wiki/Associations-scoping,它编辑了原始问题