0

在我正在开发的项目管理应用程序中,我目前正在开发用于管理工单的页面,我希望该页面应包含以下内容:

- 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
4

1 回答 1

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
于 2013-02-12T21:56:02.463 回答