天天看點

如何修改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/