到达属于用户拥有的“项目”的“门票”

时间:2013-02-12 21:48:55

标签: ruby-on-rails database ruby-on-rails-3

在我正在处理的项目管理应用程序中,我正在处理一个用于管理故障单的页面,我希望该页面包含以下内容:

- 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

1 个答案:

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