Can you add columns to an ActiveRecord...

I'm new to RoR. I'm [trying to at least] to set up an associative
table relationship:

     ProductVersion has many ProductCoverages's and
     Coverages has many ProductCoverages's.

I'm new to RoR. I'm [trying to at least] to set up an associative
table relationship:

     ProductVersion has many ProductCoverages's and
     Coverages has many ProductCoverages's.

-------------------------------------------------------------------------------------------
class ProductVersion < ActiveRecord::Base

  require 'product_coverage'

  set_table_name "product_version"
  set_primary_key "product_version_id"

  has_many :product_coverages
  has_many :coverages, :through => :product_coverages
...
-------------------------------------------------------------------------------------------
class Coverage < ActiveRecord::Base

  set_table_name "coverages"
  set_primary_key "coverage_id"

  has_many :product_coverages
  has_many :product_versions, :through => :product_coverages
...
-------------------------------------------------------------------------------------------
class ProductCoverage < ActiveRecord::Base

  belongs_to :product_version
  belongs_to :coverage

  attr_accessor :external_description

  def self.find_coverages(product_version_id,coverage_type)

    find_by_sql ["select product_coverage.* from coverages,
product_coverage " +
                 "where coverages.coverage_id =
product_coverage.coverage_id and product_coverage.product_version_id =
? " +
                 " and optional_base_type = ?",
product_version_id,coverage_type]
  end
end
-------------------------------------------------------------------------------------------

First, is my HABTM setup correctly?

Looks ok.

If I understand your code correctly, you are trying to get all
Coverages for a given ProductVersion (possibly with an optional
base_type). In this case, you can write the query much more nicely
though:

ProductVersion.find(product_version_id).coverages.find_by_coverage_type(optional_base_type)

or if no optional_base_type is given:

ProductVersion.find(product_version_id).coverages

Only drawback is that this will use two queries instead of one, but
that should not be a problem in almost all cases.

If you really want the ProductCoverage instances (even though that
does not seem to make sense to me), use something like:

ProductVersion.find(product_version_id).product_coverages.find(:all,
:conditions=>['coverages.coverage_type=?', optional_base_type],
:include=>:coverages)

Second, what I would like to try is that I would like to add that
"external_description" column. It's a column that is available within
the SQL query (but on COVERAGES). Is there a way to do this?

Not clear on what you mean. If there is a column called
external_description in the coverages table, this will be available on
any Coverage object. The following should work:

ProductVersion.find(product_version_id).coverages.each do |c|
  p c.external_description
end

Maybe I don't understand you correctly...

Cheers,
Max