gpt4 book ai didi

ruby-on-rails - SQLite3::ConstraintException: NOT NULL 约束失败: items.title: INSERT INTO "items"("image", "created_at", "updated_at") VALUES (?, ?, ?)

转载 作者:太空宇宙 更新时间:2023-11-03 16:40:26 25 4
gpt4 key购买 nike

我正在开发一个简单的应用程序,用户可以在其中将主题添加到购物车。但是有一个关于非空约束的错误。

浏览器显示的错误信息是这样的。

SQLite3::ConstraintException: NOT NULL constraint failed: items.title: INSERT INTO "items" ("image", "created_at", "updated_at") VALUES (?, ?, ?)

我尝试删除 schema.rb 中的非空约束。但是错误信息仍然存在。那么,我该怎么办?

架构:

create_table "items", force: :cascade do |t|
t.string "image", null: false
t.string "title", null: false
t.string "description", null: false
t.string "stock", null: false
t.string "price", null: false
t.integer "status", limit: 1, default: 0, null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end

Controller :

class SellController < ApplicationController
def new
@item = Item.new
end

def confirm
@item = Item.new(title: params[:title],price: params[:price],stock: params[:stock],description: params[:description],image: "default_item.jpg")
render :new if @item.invalid?
end

def create
@item = Item.new(title: params[:title],price: params[:price],stock: params[:stock],description: params[:description],image: "default_item.jpg")
#@item = Item.new(item_params)
if params[:image]
@item.image = "#{@item.id}.jpg"
image = params[:image]
File.binwrite("public/item_images/#{@item.image}", image.read)
end
if params[:back]
format.html { render :new }
elsif @item.save
flash[:notice] = "your item data is saved."
redirect_to("/sell/complete")
else
render("sell/new")
end
end

def complete
end
end

我希望项目数据被保存并且浏览器上的页面更改为感谢页面。

最佳答案

仔细查看您的错误消息:

SQLite3::ConstraintException: NOT NULL constraint failed: items.title: INSERT INTO "items" ("image", "created_at", "updated_at") VALUES (?, ?, ?)

它表示 items.title 列上的非空约束失败。事实上,您没有在插入语句中提供 title 。这意味着它们没有传递给 Controller ​​代码中的 Item.new

我可以看到两个解决方案 - 如果您想保留所有这些约束(您的表中有多个非空列),您还应该添加事件记录 presence 验证。如果缺少值,它们将阻止向数据库调用 insert 语句,并且它们会在 @item.error 中为您提供很好的错误消息。

如果您允许这些列可以为空,则可以在迁移中删除约束:

change_column_null :items, :title, false

您还可以回滚创建 items 表的迁移并编辑此迁移以避免在那里设置 NOT NULL 约束。

schema.rb 在您运行迁移时生成,可用于将架构加载到数据库中。不过它不会自动完成,您需要运行适当的 rake 任务 (rake db:schema:load)。手动编辑此文件是不可取的,因为它是自动生成的,您的更改将被自动覆盖。

关于ruby-on-rails - SQLite3::ConstraintException: NOT NULL 约束失败: items.title: INSERT INTO "items"("image", "created_at", "updated_at") VALUES (?, ?, ?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57566960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com