仕事用に構築した 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:integer
case_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(ソート不可)に設定されています。