【问题标题】:Rails migration to add Primary Key to Existing tableRails 迁移以将主键添加到现有表
【发布时间】:2018-09-09 13:40:48
【问题描述】:

我有一个表有两列 employee_idmanager_id 在 Mysql 中没有主键。 Employee 和 Employee_Manager 有多对多的关系。为了更新记录,我需要Employee_Manager 表上的主键。因此,在 Rails 中,如何生成向现有表 id(主键)添加列并为现有表中的所有记录设置行值的迁移。

【问题讨论】:

  • 没有表只有两列。其中没有 id 或 autoincrement 列。该表已添加到我们的应用程序中,用作没有任何模型的连接表。
  • 所以,如果你想更新现有记录,那么你需要employee_id 以及manager_id
  • 是的,我需要通过用每行的行值填充 id 来将 id 列添加到现有表中。
  • 您不需要employee_manager 表中的id 列。您始终可以通过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: Unknown column 'employee_manager.' in 'where clause': UPDATE employee_manager SET @987654332 @ = '2018-09-09 12:24:00' 其中employee_manger.`` 为空):

标签: mysql ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2


【解决方案1】:

为了更新关联上的记录,您不需要在表中添加id 列。 您可以随时运行如下查询:

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

【讨论】:

    猜你喜欢
    • 2012-08-01
    • 1970-01-01
    • 2021-01-24
    • 2023-04-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多