gpt4 book ai didi

ruby - 为什么 Sequel 不写入我的数据库表?

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

controller/makenew.rb

class MakeController < Controller

map '/makenew'
#require 'model/debate'

def debate
if request.post? #this line is potentially dangerous!
#---> 1/3 fetch postdata
data = request.subset(:question, :type, :category, :assertion)
data['user_id'] = user.id #id = request.params['id']
#---> 2/3 check permissions
if user.points < 40
flash[:error] = 'You don\'t have enough points to make a debate.'
redirect_referrer
else
debate = Debate.new
end
#---> 3/3 modify database
begin
debate.save(data)
flash[:success] = success
flash[:form_data] = debate
redirect 'debates'
rescue => e
Ramaze::Log.error(e)
#flash[:form_errors] = debate.errors
#flash[:error] = data
flash[:error] = e
#flash[:error] = 'Failure whilst saving. Contact technical support!'
redirect 'debates' #redirect_referrer
end
#|
end #closes posting conditional
end #closes makesave
end

我得到的错误是。

SQLite3::ConstraintException: debates.question may not be NULL

我已经检查了 data.question 的 postdata,它不为空。

这是怎么回事?

最佳答案

您需要将“数据”传递给#update。因此:

debate.save(data)

错了,你必须做:

debate.update(data)
debate.save

如果你不这样做,你的辩论对象没有分配成员,因此它的问题成员为零,违反了你的数据库约束。

在这里查看#save 和#update 之间的区别:

简而言之:#save会将当前模型实例保存到数据库中,而#update会在一次操作中更改一堆实例属性。

但您必须记住,更改模型实例的属性不会将它们写入数据库。您始终必须显式调用 #save

关于ruby - 为什么 Sequel 不写入我的数据库表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12366741/

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