Ruby on rails rails有许多直通复选框
我有三种型号Ruby on rails rails有许多直通复选框,ruby-on-rails,forms,has-many-through,Ruby On Rails,Forms,Has Many Through,我有三种型号 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_ma
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
但我不知道如何为每个服务任务添加持续时间好的,我知道了。
谢谢
和视图
= 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
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