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 に答える