Rails_Admin相关的下拉列表

时间:2017-01-06 10:54:53

标签: ruby-on-rails rails-admin

有没有办法根据另一个下拉列表值过滤下拉列表?
例如,如果我们有ClassStudent模型Studentclass_id;有没有办法根据所选的Class

过滤下拉列表中显示的学生
  

修改

显然,rails_admin gem与我正在寻找的association关系;但它并没有完美地发挥作用。

3 个答案:

答案 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"下拉列表:

&#13;
&#13;
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;
&#13;
&#13;

答案 2 :(得分:0)

这是相关链接:https://github.com/sferik/rails_admin/wiki/Associations-scoping,它编辑了原始问题