У меня есть таблица с двумя столбцами employee_id
и manager_id
без первичного ключа в Mysql. Сотрудник и Employee_Manager связаны отношениями "много-много". Чтобы обновить запись, мне нужен первичный ключ в таблице Employee_Manager
. Следовательно, в рельсах можно сгенерировать миграцию, которая добавляет столбец к существующему идентификатору таблицы (первичный ключ) и устанавливает значение строки для всех записей в существующей таблице.
Итак, если вы хотите обновить существующую запись, вам понадобятся как employee_id
, так и manager_id
.
Да, мне нужно добавить столбец идентификатора в существующую таблицу, заполнив идентификатор значением строки для каждой строки.
столбец id
в таблице employee_manager
не нужен. вы всегда можете найти запись через Employee.find(employee_id).managers
, и это даст вам список всех менеджеров, а затем вы всегда можете сделать что-то вроде Employee.find(employee_id).managers.find(manager_id)
, чтобы найти запись, которую вы ищете.
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
.`` НУЛЬ):
Да, даже это работает.
Это не работает.Может быть, причина в этом snippets.aktagon.com/snippets/… Вот и мне нужен способ добавить столбец id со значениями в существующую таблицу
Ошибка возникает из-за того, что вы пытаетесь обновить столбец from_date
в таблице EmployeeManager
, которого даже нет.
Извините, я забыл упомянуть, что добавил в эту таблицу два новых столбца from_date
и to_date
.
Можете попробовать этот запрос EmployeeManager.where(employee_id: self.id, manager_id: manager.id).first.update(from_date: Time.now)
. посмотрите, выдает ли он по-прежнему ошибку
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/lib/active_model/attribute_methods.rb:404:in
method_missing '
вы можете захотеть использовать EmployeeManager.where(employee_id: 120, manager_id: 75).first.update_attributes(from_date: Time.now)
, учитывая, что вы находитесь на рельсах 3.2
Чтобы обновить запись об ассоциации, вам не нужен столбец id
в таблице.
вы всегда можете выполнить запрос, как показано ниже:
EmployeeManager.where(employee_id: 120, manager_id: 75).first.update_attributes(from_date: Time.now)
Ни одна таблица не имеет только два столбца. В ней нет столбца идентификатора или автоинкремента. Эта таблица была добавлена в наше приложение для использования в качестве таблицы соединения без какой-либо модели.