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