gpt4 book ai didi

ruby-on-rails - ActiveRecord::Base.connection.execute(..) 查找名称为我试图插入到表中的值的列

转载 作者:数据小太阳 更新时间:2023-10-29 07:57:14 25 4
gpt4 key购买 nike

新手问题。

我正在尝试在 ruby​​ 3.1 应用程序和文档中使用 ActiveRecord::Base.connection.execute(..)下面的代码工作。我收到的错误消息表明 execute 函数正在寻找一个名称与我要保存的值之一相同的列,但我不明白为什么。

首先,我的数据库表结构如下:

  create_table "countries", :force => true do |t|
t.string "iso3"
t.string "iso2"
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
end

我正在玩的代码如下:

code = 'ZA'
name = 'South Africa'

ActiveRecord::Base.connection.execute("INSERT INTO countries ('iso3', 'iso2', 'name')
VALUES ('Null', #{code}, #{name})")

我得到的错误信息如下:

SQLite3::SQLException: no such column: ZA: INSERT INTO countries ('iso3', 'iso2', 'name')
VALUES ('Null', ZA, SouthAfrica)

最佳答案

你从哪里得到这个的基础?这种类型的代码是不该做的事情的一个很好的例子。

如果您有 ActiveRecord,那么您就有了 ActiveRecord::Model,这样您就走在了正确的 rails 上并且几乎完成了。您不需要为这类日常事务编写原始 SQL。没有必要,而且,由于您刚刚发现的原因,它非常危险。您不能只是将随机的东西塞进您的查询中,否则您最终只会遇到麻烦。

您应该做的是声明一个模型然后使用它:

# Typically app/models/country.rb
class Country < ActiveRecord::Base
end

一旦有了模型,插入就变得非常容易:

Country.create(
:code => 'ZA',
:name => 'South Africa'
)

一个好的 ActiveRecord 引用资料是无价的,因为如果您使用它,这个工具将使您的生活变得更加轻松。

在 Rails 中,您通常会自动生成这些,以便您有一些粗略的开始:

rails generate model country

这将负责创建迁移文件、模型文件和一些您可以稍后填写的单元测试 stub 。

关于ruby-on-rails - ActiveRecord::Base.connection.execute(..) 查找名称为我试图插入到表中的值的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8897757/

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