On Nov 25, 12:19 am, "Rick Olson" <[EMAIL PROTECTED]> wrote:
> On 11/24/07, Scott <[EMAIL PROTECTED]> wrote:
>
>
>
> > It looks like the ActiveRecord and generators namespace conventions
> > are inconsistent. Sometimes the model's table name defaults to
> > 'module_classname' and sometimes to just 'classname.' I'm happy to
> > submit patches and tests, but what is the preferred default?
>
> > Example: /script/generate model -t carnivores/tiger name:string
>
> > Generator uses table_name 'carnivores_tigers' for fixtures and
> > migrations
> > Base#table_name defaults to 'tigers'
> > Base#table_name rdoc say 'carnivores_tigers'
>
> > Granted, this can be fixed by explicitly setting the table name in the
> > model class, but this doesn't seem right.
>
> If the parent is a module, it uses a normal table name.
>
> module Foo
>   class Bar < ActiveRecord::Base
>     puts table_name # => 'bars'
>   end
> end
>
> class Foo < ActiveRecord::Base
>   class Bar < ActiveRecord::Base
>     puts table_name # => 'foo_bars'
>   end
> end
>
> I don't know if the generator should be updated, or maybe the docs
> just need to be clarified a bit.

Thanks -- the intended convention wasn't clear to me. I'm thinking
both the generator and the docs need to be updated. The generator
interprets 'foo/bar' as module Foo, class Bar, but uses table_name
'foo_bar' for fixtures and migrations.

The Base#table_name docs say:
file                  class               table_name
invoice/lineitem.rb   Invoice::Lineitem   invoice_lineitems

But Invoice::Lineitem#table_name returns 'lineitems' for this:
class Invoice::Lineitem < ActiveRecord::Base; end

I'm not sure if it's worth spec'ing all the nested module/class/class
permutations in the method docs -- we'd be essentially rewriting
what's pretty plain in the Ruby code. Maybe an explicit unit test like
below would make the intent plain (Contact < Client):

def test_table_name
 assert_equal 'accounts', MyApplication::Billing::Account.table_name,
'MyApplication::Billing::Account.table_name'
 assert_equal 'companies', MyApplication::Business::Client.table_name,
'MyApplication::Business::Client.table_name'
 assert_equal 'company_contacts',
MyApplication::Business::Client::Contact.table_name,
'MyApplication::Business::Client::Contact.table_name'
end


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-core?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to