2016-01-04 38 views
3

我目前正在使用Rails 4.2.4。問題是,當我跑如何使用Rails生成遷移以添加引用?

rails g migration AddCategoryRefToArticles category:references命令,

它產生以下遷移

def change 
    add_reference :articles, :category, index: true, foreign_key: true 
end 

,由於某種原因導致category_id爲整場,而不是預期的t.references。

create_table "articles", force: :cascade do |t| 
    t.string "title" 
    t.integer "category_id" 
end 

add_index "articles", ["category_id"], name: "index_articles_on_category_id", using: :btree 

這是爲什麼?

回答

1

add_reference只是一個方便的助手來生成一個整數字段,遵循在關聯中使用的命名約定。由於schema.rb映射數據庫模式,因此您希望看到特定的數據類型而不是更高級別的抽象。

我不確定爲什麼你會期望t.references,但你的期望是錯誤的。這也在add_reference文檔中有解釋。

創建user_id整數

add_reference(:products, :user) 
+0

好了,怎麼會如果我生成的模型,而不是有所不同? 'rails g model文章分類:參考文獻' –

+0

'model'生成器生成模型和遷移,而'migration'只生成遷移。無論您使用哪個生成器,遷移將是相同的。 –

+0

我的意思是當你像上面的例子那樣生成模型時,Rails創建't.reference'字段 –