在这两天被抨击之后,我完全被难倒了。我似乎无法为任何包含此模型(下面概述)或之后添加的任何模型保存任何数据。
我的迁移看起来像这样:
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
在我的控制器中,我设置了这些参数:
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 :(得分:1)
您的Scenario模型中存在错误 - 设置belongs_to
关联时,应使用单数形式。因此,代替belongs_to :activities
,您的模型应该如下所示:
class Scenario < ApplicationRecord
has_many :pages
belongs_to :activity
end