Rails migration -- 如何確認有使用哪些 Foreign keys

在 Rails Migration 中,我們可以用 table_exists?, column_exists? 之類的來查詢是否當前有這個 table name 或這個 column name 來做一些動態變化,但是在 foreign key 就沒這個功能了 .... 找了老半天 API 都沒發現,只有一個看起來很像是可以操作的 API 叫做 foreign_keys

這個 foreign_keys 它會需要傳入一個參數 table_name ,然後回傳一個陣列來列出指定的 table 有哪些 foreign keys ,來判定要不要 add_foreign_keyremove_foreign_key

具體來說要怎樣用呢?可以看一下下面的範例

def up
  foreign_keys(:users).each do |key|
    if key.to_table == :books && key.options.column_name == :book_id
        remove_foreign_key :users, :books
    end
  end
end

如此一來就可以做到類似 exists 之類的判定,來決定要新增或移除或做其他動作了。

由於每個 foreign_key 資料都是用 struct 物件丟回來的,所以它的操作可以像一般物件那樣。而它可以操作的方法有:

Comments

comments powered by Disqus