Assume that you’ve created a database table that contains tasks.
| require 'active_record' |
| ActiveRecord::Base.establish_connection :adapter => "sqlite3", |
| :database => "dbfile" |
| |
| ActiveRecord::Base.connection.create_table :tasks do |t| |
| t.string :description |
| t.boolean :completed |
| end |
Now you can define an empty Task class that inherits from ActiveRecord::Base, and you can use objects of that class to interact with the database:
| class Task < ActiveRecord::Base; end |
| |
| task = Task.new |
| task.description = 'Clean up garage' |
| task.completed = true |
| task.save |
| |
| task.description # => "Clean up garage" |
| task.completed? # => true |
The previous code calls four accessor methods to read and write the object’s attributes: two write accessors (description= and completed=), one read accessor (description), and one query accessor (completed?). None of these Mimic Methods () comes from the definition of Task. Instead, Active Record generated them by looking at the columns of the tasks table. These automatically generated accessors are called attribute methods.
You probably expect that attribute methods such as description= are either Ghost Methods () implemented through method_missing or Dynamic Methods () defined with define_method. Things are actually more complicated than that, as you’ll find out soon.