一个简单的ActiveRecord中的has_many的示例,数据库中的表的建立SQL语句为:
create table items (
id int not null auto_increment,
title varchar(50) not null,
primary key (id)
);
create table users (
id int not null auto_increment,
name varchar(50) not null,
primary key (id)
);
create table items_users (
item_id int not null,
user_id int not null,
read_time date,
constraint fk_cp_item foreign key (item_id) references items(id),
constraint fk_cp_user foreign key (user_id) references users(id),
primary key (item_id, user_id)
);
执行后结果为:
#"Thinking in JAVA", "id"=>"1"}>
#"Tom", "id"=>"1"}>
----------------------------------------
[#"Thinking in JAVA", "id"=>"1"}>]
[#"Tom", "id"=>"1"}>]
----------------------------------------
2007-06-20
2007-06-20
require "rubygems"
require "active_record"
require "pp"

ActiveRecord::Base.establish_connection(
:adapter => "mysql",
:host => "localhost",
:database => "book2",
:username => "root",
:password => "",
:port => 3306
)

class Item < ActiveRecord::Base
has_many :items_users, :dependent => :destroy
has_many :users, :through => :items_users
end


Item.create([
{:title => "Thinking in JAVA"},
{:title => "Ruby on Rails Routing"},
{:title => "Agible Development with Rails"}
])


class ItemsUser < ActiveRecord::Base
belongs_to :item
belongs_to :user
end

class User < ActiveRecord::Base
has_many :items_users, :dependent => :destroy
has_many :items, :through => :items_users
def read_item(item)
ItemsUser.create(:item => item,:user => self,:read_time => Date.today)
end
end


User.create([
{:name => "Tom"},
{:name => "Mary"},
{:name => "Jane"}
])


pp item = Item.find(:first)
pp user = User.find(:first)
puts "----------------------------------------"
user.read_item(item)
pp user.items
pp item.users
puts "----------------------------------------"
puts user.items_users.find(:first).read_time
puts item.items_users.find(:first).read_time