On 26 Sep 2008, at 12:49, Matt Wynne wrote:

Would you mind elaborating on why you don't like these? I'm pretty new to rails (but not programming generally) and rather naive about such things!

It's quite hard to explain briefly, but basically it makes the predicate (interpretation of the table) extremely difficult.

A normal table like

 cars
  ---------
  reg_plate
  owner_id
  purchase_date

Could be interpreted as "The car with reg plate <reg_plate> was bought by the person with ID <owner_id> on <purchase_date>" (ok, they might have sold it since, but...)

However, from the Rails wiki[1]:

 addresses
  ---------
  street
  city
  country
  addressable_id
  addressable_type # <- is a string

How do you interpret this? The relationship is fundamentally different depending on the value of addressable_type, and is much harder to enforce as an integrity constraint*.

There's another angle you can take, based on data types - you can define a type PERSON_ID for the attribute 'owner_id' (and re-use it in the 'departments' table as 'manager_id'), but the type of 'addressable_id' depends on the value of 'addressable_type'. How can a value not know its own type?

Easier solution:

 people
  ---------
  name
  delivery_address_id
  billing_address_id

"The person called <name> wants items delivered to the address with ID <delivery_address_id> and invoices delivered to the address with ID <billing_address_id>".



Also why is the article so down on STI? What are the drawbacks? What do people use instead?

[1]http://www.matthewpaulmoore.com/articles/1276-ruby-on-rails-code-quality-checklist

I'll reply to Mark...

TBC

Ashley

[1] http://wiki.rubyonrails.org/rails/pages/UnderstandingPolymorphicAssociations

* pah, who needs their data integrity protected anyway?

--
http://www.patchspace.co.uk/
http://aviewfromafar.net/



_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to