RoR中使用的对象关系映射是active record。如果你使用过其它的关系映射,你就会惊叹ror的对象
关系映射是如此的简洁、明了。当创建一个ActiveRecord::Base的子类时就和数据库中以类名的复
述形式作为表名的表建立了映射。
类为
class User<< ActiveRecord::Base
end
数据库中的表为
CREATE TABLE `users` (`id` int(10) unsigned NOT NULL auto_increment,
`login` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL,
`email` varchar(100) NOT NULL,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`id`))
就这样建立了映射关系。
你一定很奇怪类User中怎么没有属性啊,也没有象hibernate一样要指定主键id。其实这一切的奥秘
就是约定,一般情况下数据库中的表要有一个名为id的主键并且是自动增长字段。User类中的属性
将根据数据库表中的字段动态生成。
突然你发现你的数据库表和类之间并没有这样单复数关系,该怎么办呢?不用急自有办法。
你只要在你的类中调用一个叫set_table_name的方法就可以了。
class User<< ActiveRecord::Base
set_table_name("accounts")
end
就这样和数据中的表“accounts”之间建立的映射。
CREATE TABLE `accounts` (`id` int(10) unsigned NOT NULL auto_increment,
`login` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL,
`email` varchar(100) NOT NULL,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`id`))
问题总算是解决了.但又发现了另一问题,表的主键并不是id而是user_id。active record有办法解
决吗?当然是有的了,调用一个set_primary_key方法就ok。
class User<< ActiveRecord::Base
set_table_name("accounts")
set_primary_key("user_id")
end
数据库中的表:
CREATE TABLE `accounts` (`user_id` int(10) unsigned NOT NULL auto_increment,
`login` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL,
`email` varchar(100) NOT NULL,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`id`))
值得注意的是类中和主键对应的属性还是id而不是user_id。
user = User.new
user.id = "00001";
user.save