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

时间:2013-12-18 23:15:40

标签: mysql ruby mysql2

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

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

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

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

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

注意:我没有运行rails;只是简单的红宝石,宝石mysql2和Sequel Pro。

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,我相信我终于弄明白了。

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

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

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

=>注意用于创建表狗的语句:

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(而不是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是指包含每个dog对象属性的行。这基本上让Ruby知道每次实例化Dog类的新实例时,它应该进入该实例化并将hash [id]映射到“id”。

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

PS:这件事刚发生在我身上。我可能会在它渗透一段时间后编辑这个答案。