Migrations, :table_name or "table_name" ?

I am confused by the two different syntaxes. Both work just fine and there is not a difference in the outcome, so which? And why two methods? What's the bigger picture?

Jeremy

The arguments are converted to symbols (whether they are strings, or symbols to begin with), so it doesn't matter. I favour the symbol version because it looks prettier.

irb(main):003:0> :table_name.to_sym == "table_name".to_sym
=> true

/Jeff

the bigger picture is symbols vs strings.

the quick answer:

symbols and strings are pretty much the same for the most part. the
big difference is at the memory level. every time you use a string,
no matter if it's been used before, memory is allocated as it's a new
instance. not so with symbols.

ex:

irb(main):003:0> a = :foo
=> :foo
irb(main):004:0> b = :foo
=> :foo
irb(main):005:0> a.object_id
=> 3756302
irb(main):006:0> b.object_id
=> 3756302
irb(main):007:0> x = "foo"
=> "foo"
irb(main):008:0> y = "foo"
=> "foo"
irb(main):009:0> x.object_id
=> -604402436
irb(main):010:0> y.object_id
=> -604412996

notice that the object_ids for a and b are the same, but for x and y
they are different.

so if you use the same string over and over, especially in parameters
passed in Rails methods, you're going to be consuming more memory than
if you used symbols.

for more detailed explanations, google for 'ruby symbols'

Chris

symbols and strings are pretty much the same for the most part. the
big difference is at the memory level. every time you use a string,
no matter if it's been used before, memory is allocated as it's a new
instance. not so with symbols.

None of this really matters for a migration. I tend to use strings
because thats what my textmate bundle uses. Though I should change
it, symbols turn a really neat blue color.