【问题标题】:Saving nested has_many association based on dynamic checkboxes in Active Admin基于 Active Admin 中的动态复选框保存嵌套的 has_many 关联
【发布时间】:2017-01-12 05:52:13
【问题描述】:

代码:

商业模式

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

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

please have a look on snapshot

  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

in the snapshot 如您所见 - 所有类别和服务复选框都来自类别和服务表,通过 Category.allService.all.

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

我该如何实现它?

【问题讨论】:

    标签: ruby-on-rails activeadmin ruby-on-rails-5 form-for


    【解决方案1】:

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

    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/

    【讨论】:

    • @Muhammed 获取新记录,我的代码也不起作用。
    • @Anand 您可以使用此表格进行新记录,也请查看参考链接!
    • @Muhammed 获取新记录,我的代码也不正确。快照显示类似于我需要实现的 html 设计。您共享的参考是正确的, category_ids=>[" ", "1", "2"] 应该传入 params[:business] 以保存业务类别。在我的情况下也发生了 params=>{:business=>{:name=>"xyz", "category_ids"=>[" ", "1", "2"]}} 它将保存条目在联接表 business_categories 中,因为业务有很多类别,但我坚持将条目保存在 business_category 和服务的联接表中
    • 理想的结构应该是我可以使用选择框选择一个类别,然后通过复选框根据所选类别选择多个服务,在这种情况下,参数将是 params=>{:business =>{:name=>"xyz", "business_categories_attributes"=>"0"=> {["category_id"=>"1", "server_ids"=>["","2","3"]] , "1"=>​​{["category_id"=>"2", "server_ids"=>["","4","5"]}} }} 这将起作用。但是要求是类别和服务都应该在复选框中。 (请忽略我的第一条评论,它不完整。)
    • 流程假设我通过复选框选择了“沙龙”和“护肤”类别,然后通过 ajax 仅显示“理发”、“头发水疗”、“打蜡”服务复选框。
    猜你喜欢
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    相关资源
    最近更新 更多