我有一个名为 messages 的表,这里是表结构,我不希望 id 是自动增量字段,但它应该是该表的主键
以下是消息的表结构
CREATE TABLE `messages` (
`id` INT(11) NOT NULL,
`user_id` INT(11) NOT NULL,
`text` VARCHAR(255) NOT NULL,
`source` VARCHAR(100),
`created_at` DATETIME DEFAULT NULL,
`updated_at` DATETIME DEFAULT NULL,
PRIMARY KEY (`id`)
);
将数据插入到表中我使用下面的哈希对象
msg['id'] = 12345;
msg['user_id'] = 1;
msg['text'] = 'Hello world';
如果我将此哈希保存到消息表中,则id不会插入
message = Message.new(msg);
message.save!
Rails正在使用 id 构建插入sql,因此 id 值不会插入消息表。
如何在表中插入id值,这个插入sql rails使用 id 字段构建
INSERT INTO `users` (`updated_at`, `user_id `, `text`, `created_at`) VALUES('2010-06-18 12:01:05', '1', 'Hello world', '2010-06-18 12:01:05');
答案 0 :(得分:4)
在从旧数据迁移时设置ID值通常很有用,或者 - 正如我现在所做的那样 - 在保留FK完整性的同时合并两个应用程序。
我只是抓了一会儿,似乎你必须在>强调保存之前设置PK值。保存记录后,ActiveRecord将忽略#id =或update_attribute。因此,在使用属性哈希设置记录时,我使用:
article = Article.new(attrs)
article.id = attrs["id"]
article.save!
答案 1 :(得分:-1)
你正在反对rails工作的方式。 ActiveRecord保留使用 id 列并为您管理。
如果您需要id列,您可以控制自己,添加另一个。它不是主键,但你也可以把它作为一个独特的索引。