This works, but it can't be best practice. Advice?

I want to display all the projects in which a given team has a
product. The following code works, but isn't there a better way?
Railsier? Better Practice?

#Models#

class Team < ActiveRecord::Base
  has_many :products
  has_many :funding_sources, :through=>:products
end

class Product < ActiveRecord::Base
  belongs_to :funding_source
  belongs_to :team
end

class FundingSource < ActiveRecord::Base
  belongs_to :project
  has_many :products
end

class Project < ActiveRecord::Base
  has_many :funding_sources
  has_many :products, :through=>:funding_sources
  has_many :teams, :through=>:products #Can I do this?
end

#projects_controller.rb#
# Goal: all the projects in which a team has a product.
# GET /projects/by_team/team_id
# GET /projects/by_team/team_id.xml/
def by_team
  begin
    @team = Team.find(params[:team_id])
  rescue
    @projects=Project.find(:all)
  else
    products=@team.products
    funding_ids = products.reduce([]){|items, product|
items.push(product.funding_source_id)}
  
fundings=FundingSource.find(:all, :select=>:project_id,:conditions=>["id
IN (?)", funding_ids.uniq])
    project_ids = fundings.reduce([]){|items, funding|
items.push(funding.project_id)}
    @projects = Project.find(:all, :conditions=>["id IN (?)",
project_ids.uniq])
  end
  respond_to do |format|
    format.html #by_team.html.erb
    format.xml { render :xml => @projects }
  end
end

I can add some of the

Well, this is a little better.
.
.
.
    else
      fundings=@team.funding_sources
      project_ids = fundings.reduce([]){|items, funding|
items.push(funding.project_id)}
      @projects = Project.find(:all, :conditions=>["id IN (?)",
project_ids.uniq])
    end
.
.
.
So, now the problem becomes: how do I get all the projects that belong
to a bunch of funding sources? I am just sure there's a syntax that I
missed in the Rails Associations tut. "fundings.projects" doesn't
work.

Ron

Added this to Project model:
  def self.find_in_funding_sources(f_s)
    project_ids = f_s.reduce([]){|items, funding|
items.push(funding.project_id)}
    projects = Project.find(:all, :conditions=>["id IN (?)",
project_ids.uniq])
    return projects
  end

now the controller looks better:
.
.
.
    else
      @projects =
Project.find_in_funding_sources(@team.funding_sources)
    end
.
.
.

I don't know why I thought associations would take care of this.
Anyway, if they will, let me know how, please.