2014-10-30 16 views
15

我得到下面當我嘗試運行遷移:未定義的方法'列」 :: ForeignKeyDefinition

NoMethodError: undefined method `column' for #<Foreigner::ConnectionAdapters::ForeignKeyDefinition:0x007fa020938740> 

這裏的遷移代碼:

class CreateAdvertisement < ActiveRecord::Migration 
    def change 
    create_table :advertisement do |t| 
     t.integer :issue_id, null: false 
     t.string :client_name, null: false 
     t.decimal :size, null: false 
     t.decimal :price, null: false 
     t.decimal :commission_amount, null: false 
     t.string :first_payment, null: false 
     t.string :second_payment, null: false 

     t.timestamps null: false 
     t.foreign_key :issue 
    end 
    end 
end 

我安裝了Foreigner 1.6.1,Rails 4.2.0。有任何想法嗎?

回答

22

您或您的寶石之一使用「外國人」的寶石,它被廢棄了與軌道4.2.0

你應該更新或刪除這種依賴性。 也許有人已經做到了,比如我用「mailboxer」寶石,和「github.com/div」已經分叉的項目,以創建一個分支,所以我改變了我的Gemfile:

gem 'mailboxer', :git => 'git://github.com/div/mailboxer.git', :branch => 'rails42-foreigner' 
+1

又見Github上討論解決此問題,其中包含其他的方法太:https://github.com/mailboxer/mailboxer/issues/316 – 2015-03-15 23:45:40

18

你不Rails 4.2需要外國人,因爲它已經內置了外鍵支持。語法與外國人非常相似(儘管不完全相同)。

參見:http://edgeguides.rubyonrails.org/4_2_release_notes.html#foreign-key-support

+2

這應該是因爲Rails的4.2正確答案支持外鍵定義語法。 – Santosh 2015-01-20 09:20:11

+0

使用選項on_delete :: cascade而不是dependent :: delete – WiredIn 2015-04-23 20:00:05

+0

這應該是正確的答案。簡單地從Gemfile中刪除'外國人'修復了這個問題。 – 2016-04-28 19:28:02