在我正在处理的项目管理应用程序中,我正在处理一个用于管理故障单的页面,我希望该页面包含以下内容:
- The tickets that the user has created
- The tickets that belongs to projects that the user has created
棘手的部分是在控制器中使用正确的代码,这是我需要帮助的地方。 '@ users_tickets'工作正常,以及'@owned_projects'。但是,最后一件事就是创建一个包含属于用户所拥有项目的票证的数组,这是我需要帮助的东西(是的,我明白我对每个循环的糟糕尝试完全是错误的方式去这里)。
我如何实现我的目标?
门票控制器:
1. def manage
2. @users_tickets = Ticket.where(:user_id => current_user.id)
3. @owned_projects = Project.where(:user_id => current_user)
4.
5. @owned_projects.each do |project|
6. @tickets_for_owned_projects = Ticket.where(:project_id => project.id)
7. end
8. end
门票表:
project_id
ticket_status_id
user_id
title
description
start_date
end_date
项目表:
user_id
title
description
start_date
end_date
答案 0 :(得分:1)
如果您使用has_many
关联,那么它应该像
class User < ActiveRecord::Base
has_many :projects
has_many :tickets
has_many :project_tickets, through: :projects, class_name: 'Ticket', source: :tickets
#...
end
class Project < ActiveRecord::Base
has_many :tickets
#...
end
# in tickets controller
def manage
@tickets = current_user.tickets
@tickets_for_owned_projects = current_user.project_tickets
end
UPD :上述方法应该有效。我现在真的要睡着了,不能在这里定义什么是错的。如果有人调查,我会非常感激。
这是另一种方式。
class User < ActiveRecord::Base
has_many :projects
has_many :tickets
def project_tickets
result = []
self.projects.each do |project|
result << project.tickets
end
result.flatten
end
#...
end