gpt4 book ai didi

mysql - 如何通过 Ruby 和 mysql2 在 Sequel Pro 中创建/维护 ID 字段

转载 作者:行者123 更新时间:2023-11-30 00:54:48 24 4
gpt4 key购买 nike

在 Sequel Pro 中,使用以下语句创建了一个表:

CREATE TABLE dogs(
id INT PRIMARY KEY AUTO_INCREMENT,
name TEXT,
color TEXT
);

由于id值是由MySQL创建的,我想在ruby中设置/创建/维护id字段,以便放入dog.id 不会是空字符串。

想知道这段代码是否可以实现这一点:

def new_from_hash(hash)
Dog.new(hash["name"], hash["color"]).tap {|dog| dog.id = hash["id"]}
end

注意:我没有运行 Rails;只是普通的 ruby​​、gem mysql2 和 Sequel Pro。

谢谢!

最佳答案

好吧,我相信我终于明白了。

“由于 id 值是由 MySQL 创建的,我想在 ruby​​ 中设置/创建/维护 id 字段,以便 putsdog.id 不会是空字符串。”

=> 因为 id 值是在 MySQL 中自动分配的,所以 Ruby 无法知道该 id 值是什么,因此调用dog.id 将返回一个空字符串。

=> 我需要找到一种方法在 ruby​​ 中映射对象的 id 值,使其与当我将其插入 MySQL 数据库时自动分配给该对象的 id 相同。

=>注意创建Table dogs的语句:

CREATE TABLE dogs(
id INT PRIMARY KEY AUTO_INCREMENT,
name TEXT,
color TEXT
);

它意味着每只狗都有一个 ID(自动分配给它)、一个名称和一个颜色。有两种方法可以考虑存储狗对象的信息:

dog = { "id" => 'some integer', "name" => "simba", "color" => "grey" }

dog = [1, "simba", "grey"]

我通常喜欢使用数组来存储信息,但这次我使用了哈希(因为当我在狗(而不是 Dog)上调用 .inspect 时,结果是这样的:

#<Dog:0x007fbf74c55068 @name="samba", @color="grey">

这让我想到了哈希数据结构:

{ "id"=> 1, "name"=>"simba", "color"=>"grey"}

在 Ruby 中,我这样做:

def row_hash(hash)
hash={}
Dog.new(hash[name], hash[color]).tap { |id| id = hash[id] }
end

其中 hash_row 指的是保存每个狗对象属性的行。这基本上让 Ruby 知道,每次实例化 Dog 类的新实例时,它都应该利用该实例并将 hash[id] 映射到“id”。

这样做可以让我访问 ruby​​ 中“id”的值。

PS:这只是我想到的。我可能会在这个答案渗透一段时间后编辑它。

关于mysql - 如何通过 Ruby 和 mysql2 在 Sequel Pro 中创建/维护 ID 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20670481/

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