【问题标题】:Dynamically-adjusting drop down fields on Active Admin form (rails 3.2)动态调整 Active Admin 表单上的下拉字段(rails 3.2)
【发布时间】:2013-11-23 05:53:38
【问题描述】:

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

  • 公司模型

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

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

在我的活动管理表单页面上,我想放置字段,以便对于每个公司,我首先在下拉列表中选择它所属的行业(到目前为止有效),然后是另一个字段“子行业”,即根据我在上一个领域中选择的行业,只会显示我之前在该行业中分类的子行业。

例如,coca 将进入行业“饮料和饮料”,我希望表单能够动态调整并仅显示在“子行业”字段中:带有“热饮”、“冷饮”的下拉列表, “茶”、“苏打水”

form do |f|

    f.inputs "Company" do

      f.input :company_industry_id,    :label => "Select industry:",             :as => :select, :collection => CompanyIndustry.all
      f.input :company_subindfustry_id, :label => "Select subindustry:",  :as => :select, :collection => CompanySubindustry.all
end

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

有谁知道我该如何解决这个问题?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 activeadmin


    【解决方案1】:

    我选择以一种快速而肮脏的非 AJAX 方式来处理这个问题。它适用于我的场景。

    请注意,辅助选择中的不适用项是禁用的,而不是隐藏的。如果您确实需要隐藏它们,我会克隆并重建选择,而不是禁用特定选项。

    #...
    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}]
    }
    #...
    

    【讨论】:

      【解决方案2】:

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

      有一个很棒的 railscast 就这样做了 - 那将是一个很好的起点。

      【讨论】:

        猜你喜欢
        • 2013-12-18
        • 1970-01-01
        • 2013-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多