Rails: 如何使用循环将 ActiveRecord 查询结果放入数组中?
Rails: How do I place ActiveRecord query results into an array using a loop?
上下文:
我有一个 Company
模型,其中有很多 projects
。每个 project
有很多 tasks
。 company
有很多 employees
。
Employee
模型与 Company
关联,但与 projects
或 tasks
无关。 Task
模型确实有一个 employee_name
属性,因为每个任务一个员工(但每个员工的任务更多)。一名员工每 project
.
只有一个 task
架构:
我的问题:
我正在尝试创建一个数组,每个 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
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
然后说你想在某个项目中找到员工并将他们列在某处。然后你只需添加到项目
class Project
has_many :tasks
has_many :employees, through: :tasks
end
@project = Project.find(1)
@project_tasks = @project.tasks
正确地将任务与员工相关联可以使这变得更加简单。另一个好处是如果员工更改姓名会怎样?目前,您还需要完成所有任务才能更改任务中的员工姓名(或者如果员工更改了姓名,则编写代码来执行此操作)。通过使用关联,您只需更改员工姓名即可正常工作。
上下文:
我有一个 Company
模型,其中有很多 projects
。每个 project
有很多 tasks
。 company
有很多 employees
。
Employee
模型与 Company
关联,但与 projects
或 tasks
无关。 Task
模型确实有一个 employee_name
属性,因为每个任务一个员工(但每个员工的任务更多)。一名员工每 project
.
task
架构:
我的问题:
我正在尝试创建一个数组,每个 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
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
然后说你想在某个项目中找到员工并将他们列在某处。然后你只需添加到项目
class Project
has_many :tasks
has_many :employees, through: :tasks
end
@project = Project.find(1)
@project_tasks = @project.tasks
正确地将任务与员工相关联可以使这变得更加简单。另一个好处是如果员工更改姓名会怎样?目前,您还需要完成所有任务才能更改任务中的员工姓名(或者如果员工更改了姓名,则编写代码来执行此操作)。通过使用关联,您只需更改员工姓名即可正常工作。