0

私の Ruby on Rails アプリには非常に基本的なアーキテクチャがあります。

  • 企業モデル

  • インダストリ モデル (企業は業界に属します)

  • サブインダストリー モデル (サブインダストリーはインダストリーに属します)

私のアクティブな管理フォームページで、各企業について、最初にドロップダウンでそれが属する業界を選択し(これは今のところ機能します)、次に別のフィールド「サブ業界」のみを表示するようにフィールドを配置したいと思います、前のフィールドで選択した業界に従って、この業界で以前に分類したサブ業界。

たとえば、コカは業界「飲み物と飲み物」に入り、フォームを動的に調整してフィールド「サブ業界」にのみ表示したい:「温かい飲み物」、「冷たい飲み物」、「お茶」のドロップダウン、「ソーダ」

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

明らかに、これまでのところ問題があります。前のフィールドで選択した業界内のサブ産業だけでなく、私が持っているすべてのサブ産業が表示されます。

誰も私がそれを解決する方法を知っていますか?

4

2 に答える 2

5

私はこれに、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}]
}
#...
于 2014-01-16T20:10:17.127 に答える
2

選択内容に基づいてデータを更新するにはページを更新するか、(私の好みでは) AJAX 呼び出しを実行して、最初のドロップダウンが選択された後に他のドロップダウンを更新する必要があります。

まさにこれを行うための優れたRailscastがあります。これは、開始するのに最適な場所です。

于 2013-11-11T15:37:42.630 に答える