Rails:如何使用循环将ActiveRecord查询结果放入数组?

时间:2016-02-17 15:38:58

标签: ruby-on-rails loops associations

上下文

我的Company模型有很多projects。每个project都有许多taskscompany有很多employees

Employee模型与Company相关联,而与projectstasks无关。 Task模型确实具有employee_name属性,因为每个任务只有一名员工(但每个员工的任务更多)。员工每task只有一个project

架构:

我的问题:

我尝试创建一个数组,每个employee存储projectstask的数组。

我目前有以下代码可以使用,但我想知道我是否可以更好地完成此操作。我应该改变我的模型关联,还是这样做?

        @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

1 个答案:

答案 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

将任务正确地关联到员工会使这更加简单。另一个好处是如果员工更改姓名会发生什么?目前,您还需要完成所有任务以更改任务中的员工姓名(或者如果员工更改了姓名,则编写代码来执行此操作)。通过使用关联,您只需更改员工姓名,它就可以正常工作。