Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过Ruby和mysql2在Sequel Pro中创建/维护ID字段_Mysql_Ruby_Mysql2 - Fatal编程技术网

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

如何通过Ruby和mysql2在Sequel Pro中创建/维护ID字段,mysql,ruby,mysql2,Mysql,Ruby,Mysql2,在Sequel Pro中,使用以下语句创建了一个表: CREATE TABLE dogs( id INT PRIMARY KEY AUTO_INCREMENT, name TEXT, color TEXT ); 由于id值是由MySQL创建的,所以我想在ruby中设置/创建/维护id字段,这样puts dog.id就不会是空字符串 我想知道这段代码是否可以实现: def new_from_hash(hash) Dog.new(hash["name"], hash["color"]).t

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

CREATE TABLE dogs(
id INT PRIMARY KEY AUTO_INCREMENT,
name TEXT,
color TEXT
);
由于id值是由MySQL创建的,所以我想在ruby中设置/创建/维护id字段,这样puts 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字段,这样puts dog.id就不会是空字符串

=>因为id值是在MySQL中自动分配的,所以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"]
我通常喜欢使用数组来存储信息,但这次我使用了散列,因为当我调用.inspect on dog而不是dog时,结果如下所示:

#<Dog:0x007fbf74c55068 @name="samba", @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的值


附言:我刚想到这一点。我可能会编辑这个答案后,它渗透了一段时间

如果我误解了这个问题,很抱歉,但是,在新的Dog对象中设置id字段的总体目标是什么?@summea和@mu:我在classdog.rb文件中手动创建了一个insert方法。这是它看起来的样子:def insert db.queryINSERT到dogsname、颜色值“{name}”、结束“{color}”,我想确保put dog.id不会返回空字符串,这是当前正在执行的操作。我怎样才能做到这一点?
def row_hash(hash)
  hash={}
  Dog.new(hash[name], hash[color]).tap { |id| id = hash[id] }
end