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