Как вставить значение первичного ключа явно? - PullRequest
3 голосов
/ 23 июня 2010

У меня есть таблица с именем 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 создает SQL вставки без id , поэтому значение id не вставляет таблицу сообщений.

Как вставить значение идентификатора в таблицу, Это построить рельсы sql без использования 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');

Ответы [ 2 ]

4 голосов
/ 22 ноября 2015

Установка значения ID часто полезна при переходе от устаревших данных или - как я сейчас делаю - объединении двух приложений при сохранении целостности FK.

Я просто почесал голову некоторое время, и, кажется, вам нужно установить значение PK перед вызовом save . После сохранения записи ActiveRecord игнорирует # id = или update_attribute. Поэтому при настройке записи из хэша атрибута я использую:

article = Article.new(attrs)
article.id = attrs["id"]
article.save!
0 голосов
/ 23 июня 2010

Вы работаете против работы рельсов.ActiveRecord резервирует использование столбца id и управляет им для вас.

  • Почему id не должен быть автоматически увеличивающимся столбцом, если это первичный ключ?
  • Зачем вам нужно контролировать его значение?

Если вам нужен столбец id, которым вы можете управлять сами, добавьте еще один.Это не будет первичный ключ, но вы также можете сделать его уникальным индексом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...