【问题标题】:rails has many through checkboxesrails 有很多通过复选框
【发布时间】:2016-04-01 17:46:07
【问题描述】:

我有三个模型

class Service < ActiveRecord::Base
 has_many :service_tasks
 has_many :tasks, through: :service_tasks

 accepts_nested_attributes_for :service_tasks, reject_if: :all_blank,allow_destroy: true
end

class Task < ActiveRecord::Base

 has_many :service_tasks
 has_many :services, through: :service_tasks

 enum kind: [:before, :after, :whole]
end

class ServiceTask < ActiveRecord::Base
 belongs_to :service
 belongs_to :task
 #attribute duration


end

而且我不明白如何通过选择任务和为每个 ServiceTask 选择不同的持续时间来制作向服务添加或删除 ServiceTask 的表单

我试过了

= form_for service, html: { class: "service-form" } do |form|
  = render "shared/form_errors", object: @service
  - @tasks.each do |task|
    %tr.presence-times-form__day
      %td.presence-times-form__day__weekday
        .checkbox
          = label_tag nil, class: "label" do
            = check_box_tag :task_ids, task.id,   @service.tasks.include?(task), :name => 'service[task_ids][]'
            = label_tag :task_ids, task.name

但不知道如何为每个 ServiceTask 添加持续时间

【问题讨论】:

    标签: ruby-on-rails forms has-many-through


    【解决方案1】:

    好的,我明白了。 谢谢https://stackoverflow.com/users/835935/ok32Rails has_many through form with checkboxes and extra field in the join model

    Class ServicesController
     before_filter :process_service_tasks_attrs, only: [:create, :update] #_destroy param
    
    def new
      @service = current_user.services.build
    
      Task.all.each do |task|
        @service.service_tasks.new(task: task) unless @service.tasks.include?(task)
      end
    end
    
    def edit
      @service = current_user.services.find(params[:id])
    
      Task.all.each do |task|
        @service.service_tasks.new(task: task) unless @service.tasks.include?(task)
      end
    
    end
    
    
     private
    
     def process_service_tasks_attrs
      params[:service][:service_tasks_attributes].values.each do |attr|
       attr[:_destroy] = true unless attr[:task_id].present?
      end
     end
    
      def service_params
       params.require(:service).permit(
       ...
       service_tasks_attributes: [:duration,:task_id, :id, :_destroy]
       )
     end
    
    end
    

    并查看

     = form.fields_for :service_tasks do |task_form|
      %tr.presence-times-form__day
        %td.presence-times-form__day__weekday
          .checkbox
            = label_tag nil, class: "label" do
              = task_form.check_box :task_id, { checked: @service.tasks.include?(task_form.object.task) }, task_form.object.task_id, nil
              = task_form.object.task.name
        %td
          = label_tag nil, class: "label" do
            = task_form.text_field :duration
    

    【讨论】:

      猜你喜欢
      • 2011-05-11
      • 2015-09-17
      • 2012-03-17
      • 2021-11-16
      • 2017-04-25
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多