Is that a variable a Symbol, a Method, why does this have a colon and that doesn't?
ruby, ruby-on-rails
Solution
Ruby can be hard for Java and PHP people. :)
In Ruby, not everything is what it appears to be. Take this, for example:
before_save :make_rotting
This is a method call, sure. But it's not the `make_rotting` method that is called. It's the `before_save` (`:make_rotting` is its parameter). This is a so-called hook in ActiveRecord. `before_save` will take a method name as a parameter and will dynamically call it when the moment comes.
if age > 20
Here `age` is a method call, not a symbol. It could be written as:
if age() > 20
but the parentheses are optional. And lastly:
add_column :zombies, :rotting, :boolean, default: false
This method takes four parameters, the last of which is a hash. The hash uses the new Ruby 1.9 syntax. Previously it would be written like this (with the colon in the right place, and all):
add_column :zombies, :rotting, :boolean, :default => false
You should read a good book on Ruby programming, instead of scraping pieces of knowledge from Stack Overflow posts. :)
Problem
Inconsistent naming conventions in Rails are confusing me. It seems like the syntax is all over the place. Here are some examples: Why are there commas in the migration below? And, why doesn't the keyword `default` have a colon before it? What is this `default` keyword, a method, or a variable, a symbol? What is that thing?: ``` add_column :zombies, :rotting, :boolean, default: false ``` Here is another example: Why is `age` not `:age` (with a colon)? Why is `make_rotting` called with a "`:`" before it? ``` class Zombie < ActiveRecord::Base before_save :make_rotting def make_rotting if age > 20 self.rotting = true end end end ```