Rails_Admin 个相关下拉菜单
Rails_Admin related dropdowns
有没有办法根据另一个下拉列表的值过滤一个下拉列表?
例如,如果我们有: Class
和 Student
模型,其中 Student
有 class_id
;有没有办法根据所选 Class
过滤下拉列表中显示的学生?
EDIT
显然,rails_admin gem 与我正在寻找的 association
关系;但它并不完美。
如果你可以使用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 的值:
class_id = $("#class").find(":selected").text()
给定两个 <select>
元素 "Class"
和 "Student"
,Student
列表包含 data-class_id
属性引用来自 Class
列表的值(参见下面的代码片段),您可以使用以下 vanilla-JavaScript 代码根据 "Class"
下拉列表的值过滤 "Student"
下拉列表:
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'));
});
<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>
这是相关的 link: https://github.com/sferik/rails_admin/wiki/Associations-scoping 编辑了原始问题
有没有办法根据另一个下拉列表的值过滤一个下拉列表?
例如,如果我们有: Class
和 Student
模型,其中 Student
有 class_id
;有没有办法根据所选 Class
过滤下拉列表中显示的学生?
EDIT
显然,rails_admin gem 与我正在寻找的 association
关系;但它并不完美。
如果你可以使用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 的值:
class_id = $("#class").find(":selected").text()
给定两个 <select>
元素 "Class"
和 "Student"
,Student
列表包含 data-class_id
属性引用来自 Class
列表的值(参见下面的代码片段),您可以使用以下 vanilla-JavaScript 代码根据 "Class"
下拉列表的值过滤 "Student"
下拉列表:
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'));
});
<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>
这是相关的 link: https://github.com/sferik/rails_admin/wiki/Associations-scoping 编辑了原始问题