最近在看ROR的东西,并试着实践了一下。
在看完了ROR那个诱人的demo短片和Eiffel Qiu的rubyonrails.pdf后,我在佩服ror的快捷之余,有两个疑问:
1. 如何在ror无法自动找到model和数据库表格对应关系的时候定义后,如何自定义表格和model ActiveRecord class的对应关系?
2. 演示中在class book中添加了“belongs_to :category”后,自动建立了books中的column category_id和categories表的id的外键对应,如果我们不想要用category_id作为字段名的时候如何设置对应关系?
五一有空实践了一下,这两个问题可以这样解决:
1. 定义了一个model之后,rails会自动尝试着去找到该ActiveRecord class对应的复数形式数据库表格,并建立相应的属性。例如如果class名是person的话,rails会自动找到名为people的表格(如果有的话)。
这对于表格名是一些常用词汇的情况是比较方便,但是对于一些简写的数据库表名或者一些带有明显中文色彩的表名(例如gd_novel,gd-广东)等,rails是无能为力的,无法帮你找到。
这个时候,使用set_table_name进行指定:
class Mouse < ActiveRecord::Base
set_table_name "mice"#这里定义指定的表格名
end
2. 在ror的api帮助中找到关于belongs_to的帮助,发现要进行自定义外键字段名可以这样定义:
class Book < ActiveRecord::Base
belongs_to(:Category,:class_name => 'Category', :foreign_key=>'cat_id' )
# ^属性名 ^属性的实现类名 ^对应categories ID字段的外键
end
这样books表可以这样定义:Books(id integer, title varchar(100)...cat_id integer...)。
对于ActiveRecord的其他关系定义函数:has_and_belongs_to_many、has_many、has_one等都是通过foreign_key定义外键字段名。
〔附〕:ruby on rails api:http://api.rubyonrails.com/