我在为工作而构建的 CMS 中有大量的多对多关系。我目前正在使用Select2 3.5.3来分配这些关系。这一切都很好。我的问题是尝试使它们拖放可排序并将结果存储在数据库中。
我在我的表单中获得了 Select2 拖放排序部分演示,但我不太明白如何使这个动态像我的其他 select2 实例一样 - 在我的简单实现中,我用.select2
类初始化 select2。我也不明白如何在数据库中存储订单。
我有一个从旧的 Ryan Bates 更新函数修改的示例。在此示例中,我尝试更新案例研究模型与站点模型的关系。案例研究和站点彼此之间具有标准的“拥有”和“属于”的关系。
楷模
网站.rb
has_many :case_studies_sites
has_many :case_studies, :through => :case_studies_sites
case_study.rb
has_many :case_studies_sites
has_many :sites, :through => :case_studies_sites
更新功能
...我认为它会如何完成。还有一点需要注意:我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.coffee
最后是我目前用来运行基本 select2 的咖啡脚本。
$(document).on 'ready page:load', ->
$('.select2').select2()
表单字段和 JS 目前都是为标准 select2 设置的(又名不可排序),因为我还没有弄清楚如何将 select2 演示转换为这些字段。