【发布时间】:2020-02-29 09:19:51
【问题描述】:
在这个例子中:
require 'rubygems'
require 'sqlite3'
require 'sequel'
db = SQLite3::Database.new "fruits.db"
db2 = Sequel.sqlite("fruits.db")
db.execute 'CREATE TABLE "fruit" ("box_id" INTEGER, "apples" INTEGER, "oranges" INTEGER, "total" INTEGER)'
db.execute "INSERT INTO fruit(box_id,apples,oranges) VALUES(1,2,2)"
thisBox = db2[:fruit][:box_id => 1]
这适用于 SQLite3:
db.execute "UPDATE fruit SET total = apples + oranges WHERE box_id=1"
但我无法在续集中的一行中提出相同的想法:
thisBox.update(:total => :apples + :oranges)
返回错误:
undefined method '+' for :unfollows:Symbol
我发现的唯一方法是:
apples = thisBox[:apples]
oranges = thisBox[:oranges]
thisBox.update(:total => apples + oranges)
【问题讨论】:
-
请查看“How to Ask”以及链接页面和“mcve”。我们需要查看一个演示您所遇到问题的最小代码示例。
-
我很抱歉——但我认为这就是我包含的代码示例的作用?过去我的问题从来没有遇到过问题,而且我不确定我应该在这里做些什么不同的事情。谢谢。
-
请注意,在 mcve 文档中,该代码必须是演示问题的最小可运行代码。虽然 sn-ps 经常被使用,人们围绕它编写各种代码只是为了测试和尝试提供帮助,但这对网站没有帮助。你的代码应该创建一个简单的数据库,用一些数据填充它,显示它是如何工作的和不工作的。
-
您尝试添加两个符号
:apples + :oranges,因此出现错误。它适用于 SQLite3 SQL 查询,因为您将其发送到 DBM,它知道apples和oranges是列。update语句需要知道值是什么,因此您的最后一个示例有效,因为值是由前两行检索的。打开日志记录,Sequel 将在与 DBM 对话时准确地向您展示它正在尝试做什么。 sequel.jeremyevans.net/rdoc/files/doc/… -
很好的变化。定义一个用于演示您遇到的问题的测试套件并不难,并且该过程通常会揭示问题所在,或者提出解决方法。