У меня есть таблица сообщений и вот структура таблицы, я не хочу 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';
Если я сохранить этот хэш в таблицу сообщений, идентификатор не вставка
message = Message.new(msg);
message.save!
Rails is build in insert 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');
Это завет против Rails, если я когда-либо слышал его. – jeffcook2150
@cookiecaper Ваш комментарий звучит как предрассудок или тролль. Непродуктивно. [Суррогатный ключ] (http://en.wikipedia.org/wiki/Surrogate_key) - это давно принятая практика базы данных, в которой построена Rails. Я должен добавить, что есть [способы обойти это] (http://stackoverflow.com/questions/1585323/how-to-turn-off-auto-increment-in-rails-active-record). Это не невозможно, но вы можете просто стрелять в ногу без уважительной причины. –
Вы можете установить его, если вы делаете '' 'message.id = some_value''', перед вызовом' '' message.save''' – sethcall