3

仕事用に構築した CMS には、大量の多対多の関係があります。現在、Select2 3.5.3を使用してこれらの関係を割り当てています。これはすべてうまくいきます。私の問題は、それらをドラッグアンドドロップでソート可能にし、その結果をデータベースに保存しようとしています。

Select2 Drag and Drop Sortingセクションのデモをフォームで動作させましたが、残りの select2 インスタンスのようにこれを動的にする方法がよくわかりません。単純な実装では、.select2クラスで select2 を初期化します。また、注文をデータベースに保存する方法もわかりません。

以下に、Ryan Bates の古い更新関数を変更した例を示します。この例では、ケース スタディ モデルとサイト モデルの関係を更新しようとしています。ケース スタディとサイトには、相互に標準的な所有対多関係があります。

モデル

サイト.rb

  has_many :case_studies_sites
  has_many :case_studies, :through => :case_studies_sites

ケーススタディ.rb

  has_many :case_studies_sites
  has_many :sites, :through => :case_studies_sites

更新機能

...どうすれば達成できると思いますか。注意すべきもう 1 つの重要な点: position:integercase_studies_sites テーブルにフィールドを追加しました。

def select2_sort
    self.case_studies.each_with_index do |id, index|
      CaseStudiesSite.where(case_study_id: id).update_all({position: index+1})
    end
  end

フォームと JS

サイト/_form.html.erb

サイト フォームの例を次に示します。

   <div class="form-group">
      <%= f.label :case_study, "Related Case Studies" %>
      <%= f.collection_select :case_study_ids, CaseStudy.all, :id, :title, {}, {class: 'select2 form-control', multiple: true} %>
   </div>

サイト.js.コーヒー

最後に、基本的な select2 を実行するために現在使用しているコーヒー スクリプトを示します。

$(document).on 'ready page:load', ->
  $('.select2').select2()

select2デモをこれらのフィールドに変換する方法がわからないため、現在、フォームフィールドとJSの両方が標準のselect2(ソート不可)に設定されています。

4

0 に答える 0