これを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です。
ありがとうございました。
:だからではなく、
belongs_to :activities
のモデルは次のようになりますか? – ThorTL67シナリオテーブルを作成するための移行を実行する前に、既存のPostgresqlテーブルがアクティビティテーブルと呼ばれていますか? – Zhang
代わりに '@ scenario.save!'を実行し、上記のエラー/警告を貼り付けてください。 – bitsapien