2017-07-04 73 views
1

在這兩天之後,我完全被困住了。我似乎無法保存包含此內容的任何模型的任何數據(如下所述)或之後添加的任何內容。Rails 5沒有保存數據

我有一個遷移,看起來像這樣:

class CreateScenarios < ActiveRecord::Migration[5.1] 
def change 
    create_table :scenarios do |t| 
    t.string :title 
    t.text :description 
    t.string :scenariotype 
    t.references :activity, foreign_key: true 
    t.timestamps 
    end 
end 
end 

我的架構:

create_table "scenarios", force: :cascade do |t| 
t.string "title" 
t.text "description" 
t.string "scenariotype" 
t.bigint "activity_id" 
t.datetime "created_at", null: false 
t.datetime "updated_at", null: false 
t.index ["activity_id"], name: "index_scenarios_on_activity_id" 
end 

模式是這樣的:

class Scenario < ApplicationRecord 
    has_many :pages 
    belongs_to :activities 
end 

在我的控制,我有這些PARAMS套裝:

def scenario_params 
    params.require(:scenario).permit(:title, :description, :scenariotype, :activity_id) 
end 

新的方法是這樣的:

def new 
    @scenario = Scenario.new 
    @activity = Activity.find(params[:activity]) 
end 

而創造的方法是這樣的:

def create 
    @scenario = Scenario.new(scenario_params) 
    @activity = Activity.find(@scenario.activity_id) 
    @scenario.save 
    redirect_to new_page_path(scenario: @scenario.id) 
end 

當我嘗試保存記錄,甚至在控制檯,從這個遷移或任何後來的遷移,它都不會保存並回滾,因爲它不是自動增量的。因此,運行這樣的:

scenario=Scenario.new(:activity_id =>1, :title =>"asfdasdf", :scenariotype=>"Teaching", :description=>"asdfadsf") 

的結果是這樣的

<Scenario id: nil, title: "asfdasdf", description: "asdfadsf", scenariotype: "Teaching", activity_id: 1, created_at: nil, updated_at: nil> 

然後它回滾,因爲它缺少一個ID。

我刪除並重新創建了數據庫。我認爲之前的遷移可能會出現問題,但這兩者都可以正常工作。我希望我錯過了一些令人難以置信的簡單而愚蠢的事情,但我只是沒有看到它。數據庫是Postgres。

在此先感謝任何人可以提供的幫助。

+0

你有@scenario某種形式? – ThorTL67

+0

在運行用於創建場景表的遷移之前,您是否有稱爲活動表的現有Postgresql表? – Zhang

+0

改爲執行'@ scenario.save!',然後粘貼上面的錯誤/警告。 – bitsapien

回答

1

您在方案模型中有錯誤 - 設置belongs_to關聯時,應使用單數形式。所以,而不是belongs_to :activities您的模型應該看起來像:

class Scenario < ApplicationRecord 
    has_many :pages 
    belongs_to :activity 
end 
+0

就是這樣!謝謝 - 活動模型確實存在,但我使用複數。知道這是我只是俯瞰。 – bevinh

+0

我試圖upvote,順便說一句,但我沒有足夠的點數 - 我很抱歉 - 這是超級有用的! – bevinh

+0

高興聽到!請將此標記爲答案。 – wbucko