2017-07-04 12 views
1

これを2日間バッシングした後、私は完全に困惑しています。私はこれを含むモデル(以下に概説)や後で追加したモデルのデータを保存することはできません。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 id: nil, title: "asfdasdf", description: "asdfadsf", scenariotype: "Teaching", activity_id: 1, created_at: nil, updated_at: nil> 

のようなもので

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

結果をそして、それはIDが欠落しているため、それはロールバック:だから、このような何かを実行しています。

データベースを削除して再作成しました。私は以前の移行で何かが間違っているかもしれないと思ったが、それらはどちらもうまく機能する。私は信じられないほど簡単で愚かなものを見逃していると思っていますが、私はそれを見ていません。データベースはPostgresです。

ありがとうございました。

+0

:だからではなく、belongs_to :activitiesのモデルは次のようになりますか? – ThorTL67

+0

シナリオテーブルを作成するための移行を実行する前に、既存のPostgresqlテーブルがアクティビティテーブルと呼ばれていますか? – Zhang

+0

代わりに '@ scenario.save!'を実行し、上記のエラー/警告を貼り付けてください。 – bitsapien

答えて

1

シナリオモデルに間違いがあります。belongs_toの関連付けを設定する場合は、単数形を使用する必要があります。あなたは@scenarioのためのいくつかの並べ替えの形式を持っていますか

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

それはそれです!ありがとう - 活動モデルは存在しましたが、私は複数形を使っていました。それは私がちょうど見落としていたものであることが分かっていた。 – bevinh

+0

私はupvote、btwしようとしたが、私はカウントするために十分なポイントがありません - 私はとても申し訳ありません - それは非常に役立った! – bevinh

+0

それを聞いてうれしい!これを回答としてマークしてください。 – wbucko

関連する問題