Record an association between Users and Messages

Since you're dealing with a relational database, you'll likely want to have different tables relating to one another. For example, let's say you want to have a simple email-like system where users can send one another messages.

First, create a messages table in MySQL:

create table messages (
  pk_id       int not null auto_increment,
  primary key (pk_id),
  subject     varchar(64) not null,
  body        varchar(255) not null,
  author      int not null,
  recipient   int not null,
  date_sent   date not null 
);

Then add a Message class to the end of tutorial_setup.rb.

class Message < Lafcadio::DomainObject
  string        'subject'
  string        'body'
  domain_object User, 'author'
  domain_object User, 'recipient'
  date          'date_sent'
end

As before, you leave out the pk_id field.

Once you've defined the Message class, you can treat instances of User as values of the fields Message#author and Message#recipient.

require 'tutorial_setup'

john = User[1]
five_years_ago = Date.today - ( 365 * 5 )
jane = User.new(
	'birthday' => five_years_ago
  'email' => 'jane.doe@email.com',
  'first_name' => 'Jane',
  'last_name' => 'Doe',
  'password' => 'jane_pass',
)
jane.commit
message_body = "Hey, Jane,\n\nWanna go to the movies on Saturday?"
message = Message.new(
  'subject' => 'hey',
  'body' => message_body,
  'author' => john,
  'recipient' => jane,
  'date_sent' => Date.today
)
message.commit

With this code Lafcadio will save all the appropriate id numbers in the right fields in MySQL.