On Nov 25, 12:19 am, "Rick Olson" <technowee...@gmail.com>
wrote:> On 11/24/07, Scott <scott.will...@gmail.com> 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 rubyonrails-core@googlegroups.com
To unsubscribe from this group, send email to
rubyonrails-core-unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/rubyonrails-core?hl=en
-~----------~----~----~----~------~----~------~--~---