上下文
我的Company
模型有很多projects
。每个project
都有许多tasks
。 company
有很多employees
。
Employee
模型与Company
相关联,而与projects
或tasks
无关。 Task
模型确实具有employee_name
属性,因为每个任务只有一名员工(但每个员工的任务更多)。员工每task
只有一个project
。
架构:
我的问题:
我尝试创建一个数组,每个employee
存储projects
个task
的数组。
我目前有以下代码可以使用,但我想知道我是否可以更好地完成此操作。我应该改变我的模型关联,还是这样做?
@employee = Employee.find(1)
@employee_tasks = Task.where(employee: @employee.name)
@employee_project = {}
i = 0
@employee_tasks .each do |f|
i += 1
@employee_project[i] = Project.where(id: f.project_id)
end
答案 0 :(得分:1)
volatile boolean run = true;
Thread t = new Thread()
{
while(run)
{
// whatever is here runs till Run is false
}
}
t.start();
/*now when the button is pressed just trigger Run as false and the thread will be ended
later call t.start() when you need to start the thread again.*/
我假设你在视图中目前有一个任务
class Project
has_many :tasks
end
class Task
belongs_to :project
belongs_to :employee
delegate :name, to: :employee, prefix: true
end
class Employee
has_many :tasks
has_many :projects, through: :tasks
end
通过在委托方法上使用前缀选项,如果您以这种方式关联模型,这仍然有效。
所以现在在你的控制器中你可以做到
<%= task.employee_name %>
然后再说你想在项目中找到员工并将其列在某个地方。然后你只需添加到项目
@employee = Employee.find(1)
@employee_tasks = @employee.tasks
将任务正确地关联到员工会使这更加简单。另一个好处是如果员工更改姓名会发生什么?目前,您还需要完成所有任务以更改任务中的员工姓名(或者如果员工更改了姓名,则编写代码来执行此操作)。通过使用关联,您只需更改员工姓名,它就可以正常工作。