我有两个控制器EmployeesController和TasksController。我已经通过关联建立了多对多关系,并创建了一个EmployeeTasksController来处理关系 这就是我添加到routes.rb
的内容### ASSIGING EMPLOYEES TO TASKS ###
resources :tasks do
resources :employees, controller: 'employee_tasks'
end
然后是控制器:
class EmployeeTasksController < ApplicationController
def create
@task=Task.find(params[:task_id])
@employee=@task.employees.create(employee_params)
if @employee.save
render json: @employee, status: :created, employee: @employee
else
render json: @employee.errors, status: :unprocessable_entity
end
end
def employee_params
params.require(:employee).permit(:name,:email,:deleted_at)
end
schema.rb具有:
create_table "employee_tasks", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
t.uuid "employee_id", null: false
t.uuid "task_id", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["task_id"], name: "index_employee_tasks_on_task_id"
t.index ["employee_id"], name: "index_employee_tasks_on_employee_id"
end
我也有
class Employee < ApplicationRecord
has_many :employee_tasks
has_many :tasks, through: :employee_tasks
end
class Task < ApplicationRecord
has_many :employee_tasks
has_many :employees, through: :employee_tasks
end
class EmployeeTask < ApplicationRecord
belongs_to :employee
belongs_to :task
end
现在我的问题是:我是否正确实现了create方法?我应该能够为一个任务分配一个或多个用户吗?
答案 0 :(得分:0)
@RubyBox,如果您的模型中具有以下关联。
Task.rb
class Task < ApplicationRecord
has_many :employee_tasks
has_many :employees, through: :employee_tasks
end
以及下面的EmployeeTask.rb
中
class EmployeeTask < ApplicationRecord
belongs_to :task
belongs_to :employee
end
Employee.rb
class Employee < ApplicationRecord
has_many :employee_tasks
has_many :tasks, through: :employee_tasks
end
通过使用此create
方法,只有在数据库中还没有该员工的情况下,您才可以将其分配给多个员工。
执行此操作的最佳方法是在此操作中创建employee_task对象。
def create
@task = Task.find(params[:task_id])
@employee = Employee.find_or_create_by(employee_params)
@employee_task = EmployeeTask.new(task: @task, employee: @employee)
if @employee_task.save
#return employee or employee_task
else
#return employee or employee_task
end
end
答案 1 :(得分:0)
如果您只想为任务分配用户,则可以将其作为常规任务的一部分来创建或更新操作:
<%= form_for(@task) do |f| %>
<%= f.collection_checkboxes :user_ids, User.all, :id, :name %>
# ...
<% end %>
class TasksController
def create
@task = Task.new(task_params)
# ...
end
def update
if @task.update(task_params)
# ...
else
# ...
end
end
private
def task_params
params.require(:task).permit(:user_ids, ...)
end
end