2016-08-14 38 views
0

我的模型進入回退,因爲foreign_key「必須存在」,但不會接受一個價值

class Event < ApplicationRecord 
    has_many :event_options 
end 

class EventOption < ApplicationRecord 
    belongs_to :event 
end 

rails c,我可以用它來創建一個Event就好了。

Event.create(name:"Face Painting", active:true) 

然而,當我這樣做:

EventOption.create(description:"You give us money. We paint your face.", price: 250.00, name: "People Painting 1", event: 1); 

它給我的錯誤回滾:

@details={:event=>[{:error=>:blank}]}, 
@messages={:event=>["must exist"]}> 

我嘗試用event_id,只是id以及(以及作爲:event_id/:event/:id => 1,但由於某種原因,他們都沒有讓我提供鏈接到EventOptionEvent創建。

任何線索?

+0

嘿。當您在軌道控制檯中輸入「EventOption」時會發生什麼?它應該返回EventOption表上存在的所有列。其中一個應該是'event_id'這樣的foreign_key。如果您尚未這樣做,則需要將這些數據關聯到數據庫遷移中。 –

回答

2

我有一種感覺,你沒有正確地關聯數據庫列。在這種情況下,你需要創建一個遷移:

rails g migration AddForeignKeyToEventOptions 

然後在遷移文件,您需要添加一個字段的事項標識:

... 
def change 
    add_column :event_options, :event_id, :integer 
end 
... 

然後,你需要運行您的遷移:

rake db:migrate 

一旦這些正確關聯,您需要重新啓動控制檯,然後盡你event_option與任何事件相關聯:

EventOption.create(
    description:"You give us money. We paint your face.", 
    price: 250.00, 
    name: "People Painting 1", 
    event: 1  # Supposing that event with id: 1 exists. 
) 

編輯: 下面是軌道文檔的鏈接創建遷移: http://edgeguides.rubyonrails.org/active_record_migrations.html#creating-a-migration

我期待在本節:

class AddUserRefToProducts < ActiveRecord::Migration[5.0] 
    def change 
    add_reference :products, :user, foreign_key: true 
end 
end 
+0

我最終得到這個,因爲我運行的遷移:'PG :: UndefinedColumn:錯誤:在外鍵約束中引用的列「event_id」不存在' – GeekFitness

+0

我會更新我的答案。你將需要添加'event_id'的列。 –

+0

這是不是已經在:events表上創建:id默認情況下?或者我需要做一個'add_column:event_options,:event_id'? – GeekFitness

0

什麼:

event = Event.create(name:"Face Painting", active:true)

EventOption.create( description: "You give us money. We paint your face.", price: 250.00, name: "People Painting 1", event: event )

此外,除非你是在一行上結合兩個語句,就沒有必要使用Ruby分號。

+1

我認爲從終端複製/粘貼使用分號進行。我甚至沒有注意到它。 #sheepish – GeekFitness

相關問題