2016-07-15 19 views
0

我想從做seller_id在遷移添加到我的項目模型如下:Rails遷移t.belongs_to:user,添加自定義列名seller_id?

rails g model Item title:string description:text price:bigint status:integer published_date:datetime seller:belongs_to

這並沒有當然的工作...

最終我想看看seller_id在我的項目表,它將項目模型與用戶模型相關聯。

目前我的移民是這樣的:

class CreateItems < ActiveRecord::Migration 
    def change 
    create_table :items do |t| 
     t.string :title 
     t.text :description 
     t.bigint :price 
     t.integer :status 
     t.datetime :published_date 
     t.belongs_to :user, index: true, foreign_key: true 
     t.timestamps null: false 
    end 
    end 
end 
  1. 如何修改這個遷移創建一個外鍵「seller_id」,涉及到用戶模型。

  2. 如何從控制檯自動生成包含來自1.的編輯的遷移? I.E修改rails g模型...以生成我需要的遷移。

非常感謝!

回答

2

只是明確定義你想要在遷移文件,並添加必要的關係模型,而不是t.belongs_to你可以只使用:

t.integer :seller_id, index: true, foreign_key: true 

,並在你的模型,你可以去了解這幾種方法如果你也想引用你的關係作爲賣方的項目實例,然後在項目類使關係:

belongs_to :seller, class_name: 'User' 

,並在用戶等級:

has_many :items, foreign_key: :seller_id 

,或者如果你想引用它作爲用戶從此項目:

belongs_to :user, foreign_key: :seller_id 

在編輯發電機而言,這是默認的方式,一個模式發生器的工作原理,並在我看來,我喜歡保持默認值會是這樣的。不過,我建議您創建自己的Rails生成器或自己的Rake任務,以便創建一些自定義/特殊案例。爲了查看創建自己的發電機,我會指向你的Ruby on Rails官方指南創建發電機讓你開始:http://guides.rubyonrails.org/generators.html

+0

不錯的答案,謝謝! – matthewalexander

0
  1. 如果你不希望它被特別稱爲seller_id那麼你擁有的就足夠了。一旦運行使用rake db:migrate遷移,你會看到你的db/schema.rb文件中的實際表結構與外鍵user_id
  2. 您只需編輯你喜歡的文本編輯器生成的遷移文件運行rake db:migrate
之前編輯遷移
+0

「添加自定義列名稱seller_id」是專門在問題中。這是一項要求。 – matthewalexander