天天看点

如何修改RubyOnRails中ActiveRecord默认的表格名和外键字段映射关系?

        最近在看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/