Question

I am thinking of creating the following models using 'has_many :through':

class Contract < AR::Base
  has_many :clientlines
  has_many :codelines
  has_many :clients, :through => :clientlines
  has_many :codes, :through => :codelines
end

class clientlines < AR::Base
  belongs_to :contract
  belongs_to :client
end

class Client < AR::Base
  has_many :clientlines
  has_many :contracts, :through => :clientlines
end

class codeline < AR::Base
  belongs_to :contract
  belongs_to :code
  units_alloc -------**I would like to add this attribute after this intermediate
 end                 has been created?

class Code < AR::Base
  has_many :codelines
  has_many :contracts, :through => :codelines
end

Do I first create the models with 'rails generate model Contract authnum:string, client_id:integer, st_date:date, end_date:date' for example. Then fill in all of the associations before the migrations?.

Also, my understanding is that all of the join tables are created automatically by rails when using the has_many :through association. When does that happen?

Lastly, as indicated by the **, can I have this attribute in codelines, and do I create a 'rails generate migration add_units_alloc_to_codelines units_alloc:number' in order to add this attribute to the join table? I was also wondering how I declare the number to be too two decimal places?

If you have the time and inclination could you please comment on my proposed design for my database?

Thanks.

Was it helpful?

Solution

  1. by using has_many :through you use a third model that makes the connection between the other two, so rails doesn't automatically build that model, you build it yourself and reference the foreign keys for the other two models.

  2. don't name your models at their plural, always singular. if you can't name them at singular, you're doing it wrong

  3. The order in which you create your models shouldn't matter too much (rails generates some migrations which you can easily modify later)

  4. That units_alloc attribute, just add it to the model when you create it, simple as that!

  5. for 2 decimals use something like t.decimal :amount, :precision => 6, :scale => 2 in your migration (that example gives you 6 digits and 2 decimals)

  6. Read the Rails Guides, it will really help you get out a lot of trouble

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top