根据活动管理员中的动态复选框保存嵌套has_many关联



代码:

商业模式

class Business < ApplicationRecord
  has_many :business_categories
  has_many :categories, through: :business_categories
  ......
end

类别模型

class Category < ApplicationRecord
   has_many :services
   has_many :business_categories
   has_many :businesses, through: :business_categories
   .....
 end

业务类别模型

class BusinessCategory < ApplicationRecord
  belongs_to :business
  belongs_to :category
  has_many :business_category_services
  has_many :services, through: :business_category_services
  ....
end
class Service < ApplicationRecord
  belongs_to :category
end

和我想设计的表格,请查看下面的快照。

请看一下快照

  form do |f|
    f.inputs 'Business' do
    f.input :name
    f.input :category_ids, as: :check_boxes, collection: Category.all.map{|category| [category.name, category.id]}
    f.has_many :business_categories, :class=>'select_category', :heading=>'Services',  :new_record=> true do |business_category|
    business_category.input :service_ids, as: :check_boxes, collection: Service.all.map{|service| [service.name, service.id]}, :input_html => { :class => 'services_checkboxes'}
  end

在快照中,如您所见 - 所有类别和服务复选框都来自类别和服务表,通过Category.allService.all.

并且service_ids应该是动态的,我的意思是我应该只看到那些基于步骤 2 中选择类别的服务,而不是全部。

我该如何实现它?

对于新记录(业务),您当前的表单很好,但对于编辑,您的表单应该是这样的:

form do |f|
  f.inputs 'Business' do
  f.input :name
  Category.all.each |category| do
    check_box_tag :category_ids, category.id, @business.categories.include?(category), :name => 'business[category_ids][]'
    label_tag :category_ids, category.id
  end
  f.has_many :business_categories, :class=>'select_category', :heading=>'Services',  :new_record=> true do |business_category|
    Service.all.each |service| do
      check_box_tag :service_ids, service.id, business_category.services.include?(service), :name => 'business[business_categories][service_ids][]'
      label_tag :service_ids, service.id
    end
  end
end

参考: http://millarian.com/rails/quick-tip-has_many-through-checkboxes/

最新更新