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