一个简单的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 " 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