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 动态调整活动管理表单(rails 3.2)上的下拉字段_Ruby On Rails_Ruby_Ruby On Rails 3_Activeadmin - Fatal编程技术网

Ruby on rails 动态调整活动管理表单(rails 3.2)上的下拉字段

Ruby on rails 动态调整活动管理表单(rails 3.2)上的下拉字段,ruby-on-rails,ruby,ruby-on-rails-3,activeadmin,Ruby On Rails,Ruby,Ruby On Rails 3,Activeadmin,我的Ruby on Rails应用程序有一个非常基本的架构: 公司模式 行业模型(公司属于某个行业) 子行业模型(子行业属于某个行业) 在我的“活动管理表单”页面上,我希望为每个公司设置字段,以便我首先在下拉列表中选择它所属的行业(目前为止,该功能正常),然后选择另一个字段“子行业”,该字段仅根据我在上一个字段中选择的行业显示,我之前在这个行业中分类的子行业 例如,可口可乐将进入“饮料和饮料”行业,我希望表格能够动态调整,并且只显示在“子行业”字段中:下拉列表中有“热饮”、“冷饮”、“茶”、

我的Ruby on Rails应用程序有一个非常基本的架构:

  • 公司模式

  • 行业模型(公司属于某个行业)

  • 子行业模型(子行业属于某个行业)

在我的“活动管理表单”页面上,我希望为每个公司设置字段,以便我首先在下拉列表中选择它所属的行业(目前为止,该功能正常),然后选择另一个字段“子行业”,该字段仅根据我在上一个字段中选择的行业显示,我之前在这个行业中分类的子行业

例如,可口可乐将进入“饮料和饮料”行业,我希望表格能够动态调整,并且只显示在“子行业”字段中:下拉列表中有“热饮”、“冷饮”、“茶”、“苏打水”

显然,到目前为止我有一个问题,它向我展示了我所有的子行业,而不仅仅是我在上一个领域选择的行业中的子行业


有人知道我如何解决这个问题吗?

您需要根据所选内容进行页面刷新以更新数据,或者(我的偏好)在选择第一个下拉列表后进行AJAX调用以更新另一个下拉列表


这是一个很好的开始。我选择了一种快速、肮脏、非AJAX的方式。它对我的场景很有效

请注意,辅助选择中的不适用项是禁用的,而不是隐藏的。如果您真的需要隐藏它们,我将克隆并重新生成select,而不是禁用特定选项

#...
f.input :user, :input_html => {
  ##Manipulate Location select based on selected User
  :onchange => "
    var user = $(this).val();

    $('#order_location_id').val(0).find('option').each(function(){
      var $option = $(this),
        isCorrectUser = ($option.attr('data-user') === user);  

        $option.prop('disabled',!isCorrectUser);
    });
  "
}
##Insert necessary Location info into DOM
f.input :location, collection: Location.all.map{ |loc|
  [loc.name,loc.id, {"data-user" => loc.user_id}]
}
#...
#...
f.input :user, :input_html => {
  ##Manipulate Location select based on selected User
  :onchange => "
    var user = $(this).val();

    $('#order_location_id').val(0).find('option').each(function(){
      var $option = $(this),
        isCorrectUser = ($option.attr('data-user') === user);  

        $option.prop('disabled',!isCorrectUser);
    });
  "
}
##Insert necessary Location info into DOM
f.input :location, collection: Location.all.map{ |loc|
  [loc.name,loc.id, {"data-user" => loc.user_id}]
}
#...