Миграция Rails для добавления первичного ключа в существующую таблицу

У меня есть таблица с двумя столбцами employee_id и manager_id без первичного ключа в Mysql. Сотрудник и Employee_Manager связаны отношениями "много-много". Чтобы обновить запись, мне нужен первичный ключ в таблице Employee_Manager. Следовательно, в рельсах можно сгенерировать миграцию, которая добавляет столбец к существующему идентификатору таблицы (первичный ключ) и устанавливает значение строки для всех записей в существующей таблице.

Ни одна таблица не имеет только два столбца. В ней нет столбца идентификатора или автоинкремента. Эта таблица была добавлена ​​в наше приложение для использования в качестве таблицы соединения без какой-либо модели.

Smriti Gupta 09.09.2018 15:44

Итак, если вы хотите обновить существующую запись, вам понадобятся как employee_id, так и manager_id.

Abhinay 09.09.2018 15:47

Да, мне нужно добавить столбец идентификатора в существующую таблицу, заполнив идентификатор значением строки для каждой строки.

Smriti Gupta 09.09.2018 15:48

столбец id в таблице employee_manager не нужен. вы всегда можете найти запись через Employee.find(employee_id).managers, и это даст вам список всех менеджеров, а затем вы всегда можете сделать что-то вроде Employee.find(employee_id).managers.find(manager_id), чтобы найти запись, которую вы ищете.

Abhinay 09.09.2018 15:50
emp_manager = EmployeeManager.where(employee_id: self.id, manager_id: manager.id).first emp_manager.update_attribute(:from_date, Time.now) Пытаюсь сделать это, но получаю сообщение об ошибке: ActiveRecord :: StatementInvalid (Mysql2 :: Error: Неизвестный столбец "employee_manager." В "where clause": UPDATE employee_manager SET from = '2018-09-09 12:24:00' ГДЕ employee_manger.`` НУЛЬ):
Smriti Gupta 09.09.2018 15:52

Да, даже это работает.

Abhinay 09.09.2018 15:54

Это не работает.Может быть, причина в этом snippets.aktagon.com/snippets/… Вот и мне нужен способ добавить столбец id со значениями в существующую таблицу

Smriti Gupta 09.09.2018 15:56

Ошибка возникает из-за того, что вы пытаетесь обновить столбец from_date в таблице EmployeeManager, которого даже нет.

Abhinay 09.09.2018 15:58

Извините, я забыл упомянуть, что добавил в эту таблицу два новых столбца from_date и to_date.

Smriti Gupta 09.09.2018 16:05

Можете попробовать этот запрос EmployeeManager.where(employee_id: self.id, manager_id: manager.id).first.update(from_date: Time.now). посмотрите, выдает ли он по-прежнему ошибку

Abhinay 09.09.2018 16:07

EmployeeManager.where (employee_id: 120, manager_id: 75) .first.update (from_date: Time.now) Загрузка EmployeeManager (0,6 мс) ВЫБРАТЬ employee_managers. * FROM employee_managers ГДЕ employee_managers.employee_id = 120 И employee_managers.manager_id = 75 LIMIT 1 NoMethodError : частный метод update' called for #<EmployeeManager:0x0000000669d7b8> from /home/smriti/.rvm/gems/ruby-2.2.9/gems/activemodel-3.2.22/li‌​b/active_model/attri‌​bute_methods.rb:404:‌​in method_missing '

Smriti Gupta 09.09.2018 16:20

вы можете захотеть использовать EmployeeManager.where(employee_id: 120, manager_id: 75).first.update_attributes(from_date: Time.now), учитывая, что вы находитесь на рельсах 3.2

Abhinay 10.09.2018 08:03
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
12
289
1

Ответы 1

Чтобы обновить запись об ассоциации, вам не нужен столбец id в таблице. вы всегда можете выполнить запрос, как показано ниже:

EmployeeManager.where(employee_id: 120, manager_id: 75).first.update_attributes(from_date: Time.now)

Другие вопросы по теме