Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActiveAdmin基于其他选择动态选择\u标记_Ruby On Rails_Ruby_Activeadmin - Fatal编程技术网

Ruby on rails ActiveAdmin基于其他选择动态选择\u标记

Ruby on rails ActiveAdmin基于其他选择动态选择\u标记,ruby-on-rails,ruby,activeadmin,Ruby On Rails,Ruby,Activeadmin,目前,我有一个表单如下所示: form_tag(manage_titans_admin_collection_path(collection), method: :post) do label_tag('Race:') + ' ' + select_tag(:race, options_for_select(Collectible.where(primary_type: 'cpt_golem').order('race asc').uniq.pluck(:race))) + '

目前,我有一个表单如下所示:

form_tag(manage_titans_admin_collection_path(collection), method: :post) do
  label_tag('Race:') +
  ' ' +
  select_tag(:race, options_for_select(Collectible.where(primary_type: 'cpt_golem').order('race asc').uniq.pluck(:race))) +
  ' ' +
  label_tag('Stage:') +
  ' ' +
  select_tag(:stage, options_for_select(1.upto(4))) +
  ' ' +
  label_tag('Level:') +
  ' ' +
  text_field_tag(:level, 1, style: 'width: 100px') +
  ' ' +
  submit_tag('Submit')
end
我想更改它,使
:level
选择是一个连续数字的
选择标记
,它根据所选的
:stage
进行更改。例如,如果阶段为1,我希望显示级别1-20,但如果选择阶段2,我希望显示级别20-40


谢谢你的时间

最后,您使用的helper标记将转换为html,因此我将使用jquery的javascript函数:
假设您的页面中有:

<select name="stage" id="stage">
   <option value="1">1</option>
   <option value="2">2</option>
   <option value="3">3</option>
   <option value="4">4</option>
</select>

1.
2.
3.
4.
以及:

<select name="level" id="level"></select>

函数应该是这样的:

$(document).ready(function(){
    $('#stage').on('change', function() {
        var level = $("#level");
        var value = this.value;
        level.empty();
        if (value == 1) {
            init = 1;
            final = 20;
        } else if(value == 2) {
            init = 21;
            final = 40;
        } else if(value == 3) {
            init = 41;
            final = 60;
        } else if (value == 4) {
            init = 61;
            final = 80;
        }
        var cont = 0;
        for(var i=0; (init+cont)<=final; i++) {
            level.append('<option value="'+(init + cont)+'">'+(init + cont)+'</option>')
            cont++;
        }
    });
    $('#stage').change();
});
$(文档).ready(函数(){
$('#stage')。on('change',function(){
风险值水平=$(“#水平”);
var值=此值;
level.empty();
如果(值==1){
init=1;
最终=20;
}else if(值==2){
初始值=21;
最终=40;
}else if(值==3){
初始值=41;
最终=60;
}else if(值==4){
init=61;
最终=80;
}
var-cont=0;

对于(var i=0;(init+cont)而言,与@danielR的概念相同,但实现更简洁:

(还假设@danielR的第2阶段范围应为21-40,而不是20-40。)

HTML

<select id='stage'>
    <option></option>
    <option value='1'>1</option>
    <option value='2'>2</option>
    <option value='3'>3</option>
    <option value='4'>4</option>
</select>
<select id='level'><option></option></select>

1.
2.
3.
4.
jQuery

function addOptions(selector, modifier){
    $(selector).each(function(){ 
        $(this).find('option').remove().end().append('<option></option>');
        start = ((modifier - 1) * 20) + 1;
        end = modifier * 20;
        for (i = start; i <= end; i++){
            $('<option>').text(i).val(i).appendTo($(this));
        }
    });
}


$(document).ready(function(){    
    $('#stage').on('change',function(){
        addOptions('#level', parseInt($(this).val(),10));
    });
});
函数添加选项(选择器、修改器){
$(选择器)。每个(函数(){
$(this.find('option').remove().end().append('');
开始=((修饰符-1)*20)+1;
结束=修改器*20;

对于(i=start;我编写了您的方法,并使实现更加清晰。